2012-07-02 25 views
8

我想使用用户输入在Django中创建/添加新用户到我的应用程序。我正在使用django提供的默认登录名。我正尝试将用户添加到默认登录。 https://docs.djangoproject.com/en/dev/topics/auth/中的示例:以用户输入在Django中创建用户

>>> from django.contrib.auth.models import User 
>>> user = User.objects.create_user('john', '[email protected]', 'john password') 

传递用户名和密码。但我希望这会发生在用户输入。我该怎么做呢?

需要一些指导...

我试过,但它似乎不工作:

def lexusadduser(request): 
    """ 
    add user 
    """ 
    if request.method == "POST": 
     user.save() 

     auth_user = authenticate(username=user.username,password=user.password) 

     if auth_user is not None: 
      lexusmain(request) 
     else: 
      return render('adduser.html') 
+0

这个例子有明显的错误。你想用这种观点达到什么逻辑? – jdi

+0

我想添加一个新用户,如果添加,请将他发送到主页面,否则请发回他以添加用户页面... – lakesh

+0

我理解这一部分,但是您想用身份验证完成什么?你正在保存一个不存在的'user'对象,然后你正在验证那个不存在的变量。 – jdi

回答

24

你需要做的第一件事是创建一个ModelForm

forms.py

from django.contrib.auth.models import User 

class UserForm(ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'email', 'password') 

一个的ModelForm自动生成表单关闭你提供一个模型。它处理基于字段的验证。

views.py

from forms import UserForm 
from django.contrib.auth import login 
from django.http import HttpResponseRedirect 

def lexusadduser(request): 
    if request.method == "POST": 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      new_user = User.objects.create_user(**form.cleaned_data) 
      login(new_user) 
      # redirect, or however you want to get to the main view 
      return HttpResponseRedirect('main.html') 
    else: 
     form = UserForm() 

    return render(request, 'adduser.html', {'form': form}) 

如果它是一个POST请求,我们创建一个从POST值的窗体。然后我们检查它是否是一个有效的表单。如果是,我们创建用户,否则我们返回带有错误的表单。如果它不是一个POST请求,我们发送一个干净的形式

模板

<form method="post" action=""> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Create new user account" /> 
</form> 
+0

此答案对我有用,但不完整。表单模板应该包含CSRF令牌代码和一个提交按钮。我将继续前进并编辑它们。请注意,此表单默认情况下不会很漂亮,但会起作用。使它看起来不错不在问题的范围内。 – steveha

+0

更多信息请访问:http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

使用的形式。航空编码这里:

class SignupForm(forms.Form): 
    username = forms.CharField() 
    email = forms.EmailField() 
    password = forms.CharField(widget=forms.PasswordInput) 
+0

这不会将用户添加到默认权限。这就像创建新模型的权利?如果我错了,请纠正我...... – lakesh

+0

@lakesh:Naddiseo建议在您的视图中使用表单,但这个答案非常含糊,所以我不惊讶您不清楚它。它不是一个新模型。 – jdi