sto testando Django 1.5 e il modello utente personalizzata, ma ho qualche problema di comprensione Ho creato una classe User nel mio conto app, che si presenta come:autenticazione con Django 1.5
class User(AbstractBaseUser):
email = models.EmailField()
activation_key = models.CharField(max_length=255)
is_active = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
posso registrare correttamente un utente, che è memorizzato nella mia tabella account_user. Ora, come posso accedere? Ho provato con
def login(request):
form = AuthenticationForm()
if request.method == 'POST':
form = AuthenticationForm(request.POST)
email = request.POST['username']
password = request.POST['password']
user = authenticate(username=email, password=password)
if user is not None:
if user.is_active:
login(user)
else:
message = 'disabled account, check validation email'
return render(
request,
'account-login-failed.html',
{'message': message}
)
return render(request, 'account-login.html', {'form': form})
ma l'utente non toglie che il rendering del modulo di login :( Perché il mio autheticate mi restituisce None? Qualche idea?
forms.py
class RegisterForm(forms.ModelForm):
""" a form to create user"""
password = forms.CharField(
label="Password",
widget=forms.PasswordInput()
)
password_confirm = forms.CharField(
label="Password Repeat",
widget=forms.PasswordInput()
)
class Meta:
model = User
exclude = ('last_login', 'activation_key')
def clean_password_confirm(self):
password = self.cleaned_data.get("password")
password_confirm = self.cleaned_data.get("password_confirm")
if password and password_confirm and password != password_confirm:
raise forms.ValidationError("Password don't math")
return password_confirm
def clean_email(self):
if User.objects.filter(email__iexact=self.cleaned_data.get("email")):
raise forms.ValidationError("email already exists")
return self.cleaned_data['email']
def save(self):
user = super(RegisterForm, self).save(commit=False)
user.password = self.cleaned_data['password']
user.activation_key = generate_sha1(user.email)
user.save()
return user
Cosa si aspetta che accada dopo che si chiama 'login()' con il nuovo utente? –
non è la domanda, un render() credo con una sessione aperta. – billyJoe
Completamente * è * la domanda. Chiami il login, quindi ... niente. Si scende all'ultima riga, dove viene nuovamente visualizzato il modulo di accesso. Se vuoi fare qualcos'altro, dovrai inserire del codice per fare qualcos'altro. –