我試圖在用戶注冊應用程式后立即登錄,這樣他們就不必立即手動登錄。我已經從 django 的 UserCreationForm 創建了 RegisterForm 并且它可以正常作業 - 如果表單有效,它會創建一個 User 物件,但我不知道如何訪問創建的 User 物件以使用登錄功能記錄它,這需要,除了請求,還有一個用戶物件。注意:我在models.py 中編輯了默認用戶。這是我的代碼:
class RegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args,**kwargs)
self.fields['username'].widget.attrs.update({'class':'form-control','id':'username', 'aria-describedby':'usernameHelp'})
self.fields['password1'].widget.attrs.update({'class':'form-control','id':'password1', 'aria-describedby':'password1Help'})
self.fields['password2'].widget.attrs.update({'class':'form-control','id':'password2','aria-describedby':'password2Help'})
class Meta:
model = User
fields = ['username', 'password1', 'password2', 'email', 'first_name', 'last_name',
'photo', 'amazon', 'twitter', 'facebook', 'instagram', 'youtube']
widgets = {
'email':EmailInput(attrs={'class':'form-control', 'id':'email', 'aria-describedby':'emailHelp'}),
'first_name':TextInput(attrs={'class':'form-control', 'id':'first_name',}),
'last_name':TextInput(attrs={'class':'form-control','id':'last_name', 'aria-describedby':'nameHelp'}),
'photo':ClearableFileInput(attrs={'class':'form-control','id':'photo', 'aria-describedby':'photoHelp'}),
'amazon':URLInput(attrs={'class':'form-control', 'id':'amazon', 'aria-describedby':'amazonHelp'}),
'twitter':URLInput(attrs={'class':'form-control', 'id':'twitter', 'aria-describedby':'twitterHelp'}),
'facebook':URLInput(attrs={'class':'form-control', 'id':'facebook', 'aria-describedby':'facebookHelp'}),
'instagram':URLInput(attrs={'class':'form-control', 'id':'instagram', 'aria-describedby':'instagramHelp'}),
'youtube':URLInput(attrs={'class':'form-control', 'id':'youtube', 'aria-describedby':'youtubeHelp'})
}
這是視圖:
def register(request):
# POST
if request.method == "POST":
# In addition to our form we must make sure to get the files too, if photo is uploaded
form = RegisterForm(request.POST, request.FILES or None)
if form.is_valid():
form.save()
#user = User.objects.get() ???
#login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
return render(request, "astator/register.html",
{"form":form,
"message":"Something went wrong. Please try filling out the fields again. Make sure that your passwords match and that they satisfy the requirements listed bellow."
})
# GET
else:
form = RegisterForm()
return render(request, "astator/register.html", {"form":form})
uj5u.com熱心網友回復:
在您的表單中,您可以訪問您的用戶物件,以便您可以執行以下操作:
if form.is_valid():
user = form.save()
login(request, user)
return HttpResponseRedirect(reverse('index'))
這在有關保存方法的檔案中進行了解釋:Django Save Method
uj5u.com熱心網友回復:
與一般的模型表單類似,UserCreationForm 在您保存表單時回傳用戶模型實體。
if form.is_valid():
user = form.save()
login(request, user)
return HttpResponseRedirect(reverse('index'))
uj5u.com熱心網友回復:
您可以創建一個 html 頁面,然后從該 url 呼叫這個 classView,您可以使用 django Authentication 更方便
class LoginForm(AuthenticationForm):
username = UsernameField(widget=forms.TextInput(
attrs={'autofocus': True, 'class': 'form-control'}))
password = forms.CharField(label=_("Password"), strip=False, widget=forms.PasswordInput(
attrs={'autocomplete': 'current-password', 'class': 'form-control'}))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/381723.html
