Форум сайта python.su
Здравствуйте!
Использую переопределенную модель User с авторизацией по e-mail:
class MyUser(AbstractBaseUser): email = models.EmailField( verbose_name='email address', max_length=255, unique=True, db_index=True, ) last_name=models.CharField(max_length=30) first_name=models.CharField(max_length=30) second_name=models.CharField(max_length=30, blank=True) post=models.CharField(max_length=30, blank=True) ..... objects = MyUserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['last_name','first_name','second_name','post', ....] def get_full_name(self): return self.email def get_short_name(self): return self.email def __unicode__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_staff(self): return self.is_admin
def login(request): username = request.POST['email'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) return HttpResponseRedirect("/home.html")# Redirect to a success page. else: return HttpResponseRedirect("/account/invalid/")# Return a 'disabled account' error message
(r'^login/$', login),
Офлайн
Подозреваю, что ошибка в том, что в POST нету ключа email. Посмотрите в HTML-код формы авторизации, наверняка у поля логина name не email, а например username.
Офлайн
Перепутал я всё на свете с этими разными версиями и с разными книжками, но вроде некое просветление близится.
В общем сейчас такая ситуация: попробовал способ с использованием from django.contrib.auth.views import login
во view ничего не писал, в url:
(r'^login/$', login_view, {'template_name': 'enter.html'}),
def login_view(request): username = request.POST['email'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) return HttpResponseRedirect("/n1.html")# Redirect to a success page. else: return HttpResponseRedirect("/account/invalid/")# Return a 'disabled account' error message
{% if form.errors %} <p>Неверное имя или пароль</p> {% endif %} <form action="" method="post"> {% csrf_token %} <label for="email">Имя пользователя:</label> <input type="text" name="email" value="" id="email"/> <label for="password">Пароль:</label> <input type="password" name="password" value="" id="username"> <input type="submit" value="login" /> <input type="hidden" name="next" value="{{next|escape}}" /> </form>
(r'^login/$', login_view, {'template_name': 'enter.html'}),
Офлайн
С ошибками вроде разобрался, сделал так:
модель:
class MyUser(AbstractBaseUser): email = models.EmailField( verbose_name='email address', max_length=255, unique=True, db_index=True, ) last_name=models.CharField(max_length=30) first_name=models.CharField(max_length=30) second_name=models.CharField(max_length=30, blank=True) post=models.CharField(max_length=30, blank=True) objects = MyUserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['last_name','first_name','second_name','post',] def get_full_name(self): return self.email def get_short_name(self): return self.email def __unicode__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_staff(self): return self.is_admin class LoginForm(forms.Form): username = forms.CharField(max_length=100) password =forms.CharField(widget=forms.PasswordInput(render_value=False),max_length=100)
def login_view(request): if request.method == 'POST': username = request.POST['email'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) return HttpResponseRedirect("/home.html")# Redirect to a success page. return HttpResponseRedirect("/account/invalid/")# Return a 'disabled account' error message form=LoginForm() return render(request, 'enter.html', {'login_form': LoginForm})
{% if form.errors %} <p>Something is wrong</p> {% endif %} <form action="" method="post"> {% csrf_token %} <label for="email">Login:</label> <input type="text" name="email" value="" id="email"/> <label for="password">Password:</label> <input type="password" name="password" value="" id="username"> <input type="submit" value="login" /> <input type="hidden" name="next" value="{{next|escape}}" /> </form>
(r'^login/$', login_view),
Офлайн
Разобрался. Надо в settings.py добавить AUTH_USER_MODEL = ‘appl.MyUser’. Но при этом под старым админом в админку уже не попасть. Поэтому сначала надо заготовить админа в MyUser, потом уже AUTH_USER_MODEL = ‘appl.MyUser’.
Офлайн