0
私は自分のプロフィールを編集できます。Django、パスワード確認でユーザープロフィールを更新
ユーザーはユーザー名、メールアドレス、画像を持っています。
また、プロフィールを編集するときにユーザーが自分のパスワードを確認してほしいと思っています。それが自分の問題の場所です。
それはその
の代わりに自分のパスワードをチェックし、ユーザー名および/または電子メールの更新および/または私のプログラムはすべての更新を描くように見えます。 Plusパスワードは更新後に破損します。 HTMLで
forms.py
class UpdateProfile(forms.ModelForm):
username = forms.RegexField(regex=r'^\w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)),
label=_("Username"), error_messages={
'invalid': _("This value must contain only letters, numbers and underscores.")})
email = forms.EmailField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Email address"))
password = forms.CharField(
widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password"))
picture = forms.ImageField(required=False)
class Meta:
model = Person
fields = ('username', 'email', 'password', 'picture')
def clean_username(self):
if self.initial['username'] == self.cleaned_data['username']:
return self.cleaned_data['username']
try:
user = Person.objects.get(username__iexact=self.cleaned_data['username'])
except Person.DoesNotExist:
return self.cleaned_data['username']
raise forms.ValidationError(_("The username already exists. Please try another one."))
def clean_email(self):
email = self.cleaned_data["email"]
if self.initial['email'] == email:
return email
try:
gg = Person.objects.get(email=email)
except Person.DoesNotExist:
return email
print("DUPLICATE")
raise forms.ValidationError('duplicate email')
def clean(self):
if 'password' in self.cleaned_data :
p =Person.objects.get(username__iexact=self.initial['username'])
if not p.check_password(self.cleaned_data['password']):
raise forms.ValidationError(_("Password is wrong."))
return self.cleaned_data
views.py
def edit(request):
args = {}
args.update(csrf(request))
if request.method == 'POST':
user_form = UpdateProfile(request.POST, request.FILES, instance=Person.objects.get_by_natural_key(request.user.get_username()))
args['user_form'] = user_form
if user_form.is_valid():
user_form.save()
return HttpResponseRedirect('/profile/')
args['user_form'] = UpdateProfile(request.POST or None)
args['user2'] = Person.objects.get_by_natural_key(request.user.get_username())
return render_to_response('edit.html', args, context_instance=RequestContext(request))
私は、デフォルトのフォームを持っています。
私はパスワードフィールドがUpdateProfile
にあることが問題だと思います。しかし、私はそれを動作させる方法を知らない。