设置用户对象的密码并保存

时间:2017-02-24 22:37:44

标签: python django

我目前正在开展一个小项目,只是为了练习和学习Django。我决定首先从创建该术语的广泛含义的用户身份验证开始。我在登记问题上遇到了困难。我不知道我应该将set_password方法作为第一个位置参数提供什么,以及保存方法。我需要自我论证,当我尝试输入' request' 时,我收到以下错误:

  

/ register / super(type,obj)中的TypeError:obj必须是类型

的实例或子类型

这是我使用的注册视图:

def register(request):
    if request.method == 'GET':
        form = UserCreateForm()
        return render(request, 'registration/register.html', {'form': form})
    if request.method == 'POST':
        form = UserCreateForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            username = cd['username']
            email = cd['email']
            password1 = cd['password1']
            password2 = cd['password2']
            user = User
            user.username = username
            user.email = email
            if password1 == password2:
                user.set_password(request, password1)
                user.save(request)
                # redirect to success page
            else:
                # return error
        else:
            # return error

这是我的表格代码:

class UserCreateForm(forms.Form):
    email = forms.EmailField(required=True)
    username = forms.CharField(required=True)
    password1 = forms.CharField(max_length=32, widget=forms.PasswordInput)
    password2 = forms.CharField(max_length=32, widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'email', 'password1', 'password2')

如果您能帮我解决这个问题,或者可以通过其他方式注册用户,我将非常感激。

3 个答案:

答案 0 :(得分:2)

您没有调用User类来实例化它。

user = User()

答案 1 :(得分:1)

您只需使用create_user方法:

   ...
   if form.is_valid():
        cd = form.cleaned_data
        if cd['password1'] == cd['password2']:
            User.objects.create_user(
                cd['username'],
                cd['email'],
                cd['password1'],
            )
            # Redirect to success page
   ...

答案 2 :(得分:0)

我认为你需要阅读更多关于python类的内容。 你没有为self传递一个参数 - 它只是python类方法的符号,self代表一个实例,当调用一个实例方法时,你传递跳过self的所有其他参数。 我不确定它是否修复了所有内容,但我在代码中看到的错误是: - 实例化类的正确方法:user = User()(你这样做的方法就是获得对类的引用);您还可以在实例化时将用户名和电子邮件作为参数传递, - 调用用户方法的正确方法是:user.set_password(password)和user.save()