私はDjangoで新しいユーザーを作成するためにビューを使用しています。新規ユーザーはログインできません。Django
しかし、私はユーザーを作成し、認証(username = username_post、パスワード= password_post)でログインしようとすると、Noneを取得するので、テンプレートに表示されます。 '間違ったユーザー名またはパスワード。'。
私のデータベースでは、新しいユーザーを作成するたびに新しいレジスタが表示されます。しかし、パスワードが暗号化されているので、問題がログインビューかレジスタービューかどうかはわかりません。
しかし、最初にdjangoをインストールした後にコマンドラインから作成したスーパーユーザーは、問題なくログインできるため、ユーザーを作成するときに問題が発生します。
これらは私のログインで、ビューを登録します。
class Login(View):
form = LoginForm()
message = None
template = 'settings/blog_login.html'
def get(self, request, *args, **kwargs):
if request.user.is_authenticated():
return redirect('settings:index')
return render(request, self.template, self.get_context())
def post(self, request, *args, **kwargs):
username_post = request.POST['username']
password_post = request.POST['password']
user = authenticate(username=username_post, password=password_post)
if user is not None:
login(request, user)
return redirect('settings:index')
else:
self.message = 'Wrong username or password.'
return render(request, self.template, self.get_context())
def get_context(self):
return {'form': self.form, 'message': self.message}
class Register(CreateView):
success_url = reverse_lazy('settings:login')
model = User
template_name = 'settings/blog_register.html'
form_class = RegisterForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.set_password(self.object.password)
self.object.save()
return HttpResponseRedirect(self.get_success_url())
そして、これらは私の形である:
class LoginForm(forms.Form):
username = forms.CharField(max_length=20, label='Username')
password = forms.CharField(label='Password', widget=forms.PasswordInput())
class RegisterForm(forms.ModelForm):
username = forms.CharField(max_length=20, label='Username')
password1 = forms.CharField(label='Password', widget=forms.PasswordInput(),
error_messages={'required': 'Required field.',
'unique': 'Username already used.',
'invalid': 'Not valid username.'})
password2 = forms.CharField(label='Retype password', widget=forms.PasswordInput(),
error_messages={'required': 'Required field.'})
email = forms.EmailField(error_messages={'required': 'Required field.',
'invalid': 'Invalid email.'})
def clean(self):
clean_data = super(RegisterForm, self).clean()
password1 = clean_data.get('password1')
password2 = clean_data.get('password2')
if password1 != password2:
raise forms.ValidationError('Passwords are different.')
return self.cleaned_data
def clean_email(self):
email = self.cleaned_data.get('email')
username = self.cleaned_data.get('username')
if email and User.objects.filter(email=email).exclude(
username=username).exists():
raise forms.ValidationError('Email already used.')
return email
class Meta:
model = User
fields = ('username', 'password1', 'password2', 'email')
、あなたはより多くの情報が必要な場合は私に知らせてください。
:
代わりに、あなたはあなたのフォームのパスワード1フィールドから値を取得する必要があります。私は 'form.cleaned_data ['password1']'を 'self 'なしで使用しました。そして、今は完全に動作しています – JPYamamoto