2013-11-15 85 views
0

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

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注册这样的插件来完成这个任务?

非常感谢!

+0

它看起来很不错。您可以使用基于类的视图:https://docs.djangoproject.com/en/dev/topics/class-based-views/。 –

+0

为什么不使用表单?它会让你的生活变得如此简单。 Django注册,IMO可能是一个不错的选择,因为它会减少你必须管理的大量代码 – karthikr

+0

这可能是有用的:http://justcramer.com/2008/08/23/logging-in-with -email-地址合的django / –

回答

3

首先你在你的应用程序的forms.py中做一个表单类。在那里你定义你的领域,如'电子邮件','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的给你免费。