我構建了一個簡單的注冊表單,它將在用戶單擊提交時獲取資料并將其保存在資料庫中。但由于某種原因,我能夠驗證它。我洗掉了所有驗證并再次添加它們。不確定我在哪里失蹤?它沒有保存并給出錯誤處理您的請求。在代碼的 else 塊中
表格.py:
class RegisterForm(UserCreationForm):
email = forms.EmailField(max_length=100,help_text='Enter Email Address', required=True,widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Email'}))
first_name = forms.CharField(max_length=100,help_text='Enter First Name', required=True,widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'First Name'}))
last_name = forms.CharField(max_length=100,help_text='Enter Last Name', required=True,widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Last Name'}))
username = forms.CharField(max_length=100,help_text='Enter Username', required=True,widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Username'}))
password = forms.CharField(max_length=200,help_text='Enter Password', required=True,widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}))
password2 = forms.CharField(max_length=200,help_text='Enter your Password again', required=True,widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}))
#check = forms.BooleanField(required = True)
class Meta:
model = User
fields = [
'username', 'email', 'first_name', 'last_name', 'password', 'password2' #, 'check'
]
視圖.py:
def register(request):
if request.method == 'GET': #when you request a form it is in a get request
form = RegisterForm()
context = {'form' : form} #this creates a object which you want to send to the front end
return render(request, 'signup-login.html', context) # here we pushing that form to the html page
if request.method == 'POST': #when you submit a form it is POST request
form = RegisterForm(request.POST)
if form.is_valid():
form.save()
user = form.cleaned_data.get('username')
messages.success(request, 'Account was created for' user)
return redirect('home_page')
else:
messages.error(request, 'Error Processing Your Request')
context = {'form' : form}
return render(request, 'signup-login.html', context)
return render(request, 'signup-login.html', {})
表單 HTML(僅添加 HTML 部分):
<form action="#" class="p-4 border rounded" method = 'POST'>
{% csrf_token %}
<div class="row form-group">
<div class="col-md-12 mb-3 mb-md-0">
<label class="text-black" for="fname">Email</label>
{{ form.email }} {% comment %}removed the input and added this do for all {% endcomment %}
</div>
{% if form.email.errors %}
{% for error in form.email.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %} {% comment %} do this for all {% endcomment %}
</div>
<div class="row form-group">
<div class="col-md-12 mb-3 mb-md-0">
<label class="text-black" for="fname">Password</label>
{{ form.password }}
</div>
{% if form.email.password %}
{% for error in form.password.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="row form-group mb-4">
<div class="col-md-12 mb-3 mb-md-0">
<label class="text-black" for="fname">Re-Type Password</label>
{{ form.password2 }}
</div>
{% if form.password2.errors %}
{% for error in form.password.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="row form-group">
<div class="col-md-12 mb-3 mb-md-0">
<label class="text-black" for="fname">First Name</label>
{{ form.first_name}}
</div>
{% if form.first_name.errors %}
{% for error in form.first_name.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="row form-group">
<div class="col-md-12 mb-3 mb-md-0">
<label class="text-black" for="fname">Last Name</label>
{{ form.last_name}}
</div>
{% if form.last_name.errors %}
{% for error in form.last_name.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %}
</div>
<div class="row form-group">
<div class="col-md-12">
<input type="submit" value="Sign Up" class="btn px-4 btn-primary text-white">
</div>
</div>
</form>
代碼正在顯示,所以我假設它的 html 端沒有錯誤
我試過的:
我一次又一次地嘗試了幾個不同的值,但它沒有驗證。
非常感謝你的幫助!!
uj5u.com熱心網友回復:
更新的答案
嘗試將非欄位錯誤添加到表單 HTML 模板并檢查是否列印了任何訊息。
<form action="." class="p-4 border rounded" method="POST">
{% csrf_token %}
{{ form.non_field_errors }}
<!-- DEBUG -->
{% for field in form %}
{% if field.errors %}{{ field.html_name }}: {{ field.errors }}{% endif %}
{% endfor %}
<!-- DEBUG -->
<!-- ... your markup ... -->
</form>
檔案:https ://docs.djangoproject.com/en/4.0/topics/forms/#looping-over-the-form-s-fields
標記中的錯誤
您的模板代碼中有錯誤。您正在檢查錯誤,password2但僅列印錯誤password
{% if form.password2.errors %}
{% for error in form.password.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %}
應該
{% if form.password2.errors %}
{% for error in form.password2.errors %}
<div class "alert">
{{ error|escape }}
</div>
{% endfor %}
{% endif %}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/498317.html
