【问题标题】:Taking User Input to create Users in Django使用用户输入在 Django 中创建用户
【发布时间】:2012-07-02 12:03:01
【问题描述】:

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

>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', 'lennon@thebeatles.com', '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') 

【问题讨论】:

  • 这个例子有明显的错误。你想用这个视图实现什么逻辑?
  • 我正在尝试添加一个新用户,如果添加了将他发送到主页,否则将他发送回添加用户页面...
  • 我理解那部分,但你想通过身份验证来完成什么?您正在保存一个不存在的 user 对象,然后您正在验证该不存在的变量。
  • 我明白问题出在哪里......但是我如何获取用户输入并使用它来添加新用户,如果添加了将他发送到主页,否则将他发送回添加用户页面。 .需要一些帮助...

标签: django


【解决方案1】:

您需要做的第一件事是创建一个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 值创建一个 UserForm。然后我们检查它是否是有效的形式。如果是,我们创建用户,否则我们返回带有错误的表单。如果不是 POST 请求,我们发送一个干净的表单

模板

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

【讨论】:

  • 这个答案对我有用,但不完整。表单模板应包含 CSRF 令牌代码和提交按钮。我将继续编辑它们。请注意,此表单默认情况下不会很漂亮,但可以工作。让它看起来不错不在问题的范围内。
【解决方案2】:

使用表格。空气编码在这里:

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

【讨论】:

  • 这不会将用户添加到默认权限。这就像创建一个新模型对吧?如果我错了,请纠正我...
  • @lakesh:Naddiseo 建议在您的视图中使用表单,但这个答案非常含糊,所以我对您不清楚这一点并不感到惊讶。它不是一个新模型。
猜你喜欢
  • 2021-10-21
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多