J'utilise en vue de créer de nouveaux utilisateurs dans Django. Et puis j'ai une autre vue de les connecter.Les nouveaux utilisateurs ne peuvent pas se connecter. Django
Mais quand je crée un utilisateur, et je tente de me connecter avec authenticate (nom d'utilisateur = username_post, mot de passe = password_post), je reçois Aucun, il affiche dans le modèle 'Mauvais nom d'utilisateur ou mot de passe.'.
Dans ma base de données, je vois de nouveaux registres chaque fois que je crée un nouvel utilisateur. Cependant, comme le mot de passe est crypté, je ne peux pas dire si le problème est la vue de connexion, ou la vue du registre.
Cependant, le super utilisateur que j'ai créé via la ligne de commande après la première installation de django, est capable de se connecter sans problème, ce qui me fait penser que le problème est lorsque je crée l'utilisateur.
Ce sont mes vues Connexion et inscription:
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())
Et ce sont mes formes:
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')
S'il vous plaît, laissez-moi savoir si vous avez besoin de plus d'informations.
Vous avez raison, je n'aurais pas remarqué si elle n'a pas été pour votre aide. Je viens d'utiliser 'form.cleaned_data [ 'password1']' 'sans self'. Et maintenant, il fonctionne parfaitement – JPYamamoto