Django注册视图

时间:2013-11-15 14:56:44

标签: django django-views django-registration

我想创建一个注册视图。在这里,我的代码:

from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth import authenticate, login as auth_login
from django.contrib.auth.models import User

# create a function to resolve email to username
def get_user(email):
    try:
        return User.objects.get(email=email.lower())
    except User.DoesNotExist:
        return None

def signup(request):
    if request.method == "GET":
        return render(request, 'accounts/signup.html')
    if request.method == "POST":
        email = request.POST['email']
        last_name = request.POST['last_name']
        first_name = request.POST['first_name']
        password = request.POST['password']
        password2 = request.POST['password2']
        user = get_user(email)
        if password == password2:
            if user is None:
                user = User.objects.create_user(last_name, email, password)
                user.first_name = first_name
                user.save()
                user = authenticate(username=user, password=password)
                #login
                return redirect('/')
            else:
                #messages
                return render(request, 'accounts/signup.html')
        else:
            #messages
            return render(request, 'accounts/signup.html')

我需要你做得更好,因为你看,他有点乱。

我不知道在这项任务中使用像django-registration这样的插件是否更好?

非常感谢!

1 个答案:

答案 0 :(得分:3)

首先,在应用中的forms.py中执行表单类。在那里,您可以定义“email”,“first_name”等字段,...您可以覆盖表单类中的clean方法,然后将其与视图一起使用。

class RegistrationForm(forms.Form):
    username = forms.EmailField(max_length=30, widget=forms.TextInput(attrs=attrs_dict))
    password1 = forms.PasswordField()
    password2 = forms.PasswordField()
    first_name = forms.CharField(max_length=100)
    # rest of the fields

    def clean(self):
        cleaned_data = super(RegistrationForm, self).clean()
        username = cleaned_data.get("username")
        password1 = cleaned_data.get("password1")
        password2 = cleaned_data.get("password2")

        # you can validate those here

    class Meta:
        model = User

然后在你看来你

from forms import RegistrationForm

def signup(request):
    if request.method == "GET":
        return render(request, 'accounts/signup.html')
    if request.method == "POST":
        form = RegistrationForm(data = request.POST):
        if form.is_valid():
            user = form.save(False)
            user.set_password(user.password)
            user.save()
            user = authenticate(username=user.username, password=request.POST['password1'])
            login(request, user)

            return redirect('/')

它充分利用了django免费提供给你的东西。