簡體   English   中英

設置用戶對象的密碼並保存

[英]Setting User's object's password and saving it

我目前正在做一個小項目,目的是練習和學習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')

如果您能幫助我解決此問題,或者可以通過其他方式注冊用戶,我們將不勝感激。

您沒有調用User類來實例化它。

user = User()

您可以簡單地使用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
   ...

我認為您需要閱讀有關python類的更多信息。 您不需要為self傳遞參數-這只是python類方法的一種表示法,self代表實例,當調用實例方法時,您將傳遞所有其他跳過self的參數。 我不確定它是否可以解決所有問題,但是我在您的代碼中看到的錯誤是:-實例化類的正確方法:user = User()(您執行操作的方式只是獲得對類的引用); 您還可以在實例化時將用戶名和電子郵件作為參數傳遞-調用用戶方法的正確方法是:user.set_password(password)和user.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM