[英]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.