Форум сайта python.su
Добрый день!
Помогите, пожалуйста, решить проблемы.
Делаю регистрацию пользователей. Есть проблемы: 1) юзеры не создаются, 2) криво работает форма регистрации - при подтверждении, независимо как заполнены поля формы, всегда выдается страница registration_success!
Модель пользователя - accounts.models:
from django.db import models from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import AbstractBaseUser, BaseUserManager # Create your models here. class FexUserManager(BaseUserManager): def create_user(self, email, password = None, **kwargs): if not email: raise ValueError(_('Users must have an email address')) user = self.model( email = FexUserManager.normalize_email(email), **kwargs ) user.set_password(password) user.save(using = self._db) return user def create_superuser(self, email, password, **kwargs): user = self.create_user(email, password = password, **kwargs ) user.is_admin = True user.save(using = self._db) return user class FexUser(AbstractBaseUser): email = models.EmailField( max_length = 80, unique = True, verbose_name = _('email'), help_text = _('Example: email@example.com') ) is_active = models.BooleanField( default = True, verbose_name = _('is active') ) is_admin = models.BooleanField( default = False, verbose_name = _('is admin') ) USERNAME_FIELD = 'email' objects = FexUserManager() 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 Meta: verbose_name = _('User') verbose_name_plural = _('Users')
from django import forms from accounts.models import FexUser class RegistrationForm(forms.Form): email = forms.EmailField(label=u'Email', max_length=80) password1 = forms.CharField(label=u'Password', widget=forms.PasswordInput()) password2 = forms.CharField(label=u'Password (Again)', widget=forms.PasswordInput()) def clean_password2(self): if 'password1' in self.cleaned_data: password1 = self.cleaned_data['password1'] password2 = self.cleaned_data['password2'] if password1 == password2: return password2 raise forms.ValidationError('Passwords do not match.') def clean_email(self): email = self.cleaned_data['email'] if not email: raise forms.ValidationError('Required field') if FexUser.objects.filter(email=email).exists(): raise forms.ValidationError('Email is already taken.') return email
from django.shortcuts import render
from django.template import Context
from django.http import Http404, HttpResponseRedirect
from django.contrib.auth import logout
from customers.forms import *
from accounts.models import *
*****
def register_page(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = FexUser.objects.create_user(
email=form.cleaned_data['email'],
password=form.cleaned_data['password1'],
)
return HttpResponseRedirect('/register/success/')
else:
form = RegistrationForm()
variables = Context({
'form': form
})
return render(request, 'registration/register.html',variables)
****
Отредактировано bmco@mail.ru (Июнь 24, 2014 12:39:16)
Офлайн
if form.is_valid(): user = FexUser.objects.create_user( email=form.cleaned_data['email'], password=form.cleaned_data['password1'], ) return HttpResponseRedirect('/register/success/')
Офлайн
FishHookИзвините, но не понимаю, где потерялись пробелы.
def register_page(request): if request.method == 'POST': form = RegistrationForm(request.POST) if form.is_valid(): user = FexUser.objects.create_user( email=form.cleaned_data['email'], password=form.cleaned_data['password1'] ) return HttpResponseRedirect('/register/success/') else: form = RegistrationForm() variables = Context({ 'form': form }) return render(request, 'registration/register.html', variables)
Отредактировано bmco@mail.ru (Июнь 24, 2014 13:13:10)
Офлайн
if form.is_valid(): user = FexUser.objects.create_user( email=form.cleaned_data['email'], password=form.cleaned_data['password1'] ) # ВОт тут вот return HttpResponseRedirect('/register/success/')
Офлайн
FishHook
Офлайн