我目前正在学习 Django 并正在开发一个项目来帮助我学习,我创建了自定义用户创建表单,一切似乎都正常,除了当我填写表单时它不会创建新用户,当我打开注册页面时它似乎将其视为创建新用户的请求,并且没有创建新用户,因为表单已填写且无效,即使我填写了,它似乎仍然不认为其有效并再次呈现注册表单。
我在views.py的注册函数中放置了两个打印语句,一个在if语句中,一个在外面,只是为了知道用户是否实际上是从控制台创建的,并且每次它都说用户未创建,这意味着表单永远无效
views.py:
def signup(request):
form = RegisterForm(request.POST)
if request.method == 'POST':
if form.is_valid():
print("User is valid")
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
form.save()
new_user = authenticate(username=username, password=password)
if new_user is not None:
authlogin(request, new_user)
redirect('home/')
print("User created")
form = RegisterForm()
print("User not created")
return render(request, 'registration/signup.html', {'form': form})
forms.py:
class RegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].widget.attrs.update({
'id':'RegisterUsername',
'type':"text",
'required':'',
'maxlength':'16',
'minlength':'4 ',
})
self.fields['email'].widget.attrs.update({
'id':'RegisterEmail',
'type':"email",
'required':'',
})
self.fields['password1'].widget.attrs.update({
'id':'RegisterPassword',
'type':"password",
'required':'',
})
self.fields['password2'].widget.attrs.update({
'id':'RegisterPassword2',
'type':"password",
'required':'',
})
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
signup.html:
<div class="wrapper">
<div class="form-box login">
<h2>Register</h2>
<form method='POST' id='signup-form' novalidate>
{% csrf_token %}
<div class="input-box">
<span class='icon'><ion-icon name="person"></ion-icon></span>
{{form.username}}
<label>Username</label>
</div>
<div class="input-box">
<span class='icon'><ion-icon name="mail"></ion-icon></span>
{{form.email}}
<label>Email</label>
</div>
<div class="input-box">
<span class='icon'><ion-icon name="lock-closed"></ion-icon></span>
{{form.password1}}
<label>Password</label>
</div>
<div class="input-box">
<span class='icon'><ion-icon name="lock-closed"></ion-icon></span>
{{form.password2}}
<label>Confirm Password</label>
</div>
<button type='submit' class='btn'>Register</button>
</form>
您需要填写以下表格,
if request.method == 'POST': form = RegisterForm(request.POST)
当您添加新用户时,您应该发送请求参数作为第一个参数
new_user = authenticate(request,username=username, password=password)