form(form基礎、標籤渲染)
form基礎
Django中的Form使用時一般有兩種功能:
1、生成html標籤
2、驗證輸入內容
要想使用django提供的form,要在views裡匯入form模組
from django import forms
首先我們建立我們的模版
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>普通方式</h3> <form action=""method="post"> {% csrf_token %} <div> <label for='user'>使用者名稱</label> <p><input type="text" name="name" id="name"></p> </div> <div> <label for='pwd'>密碼</label> <p><input type="password" name="pwd" id="pwd"></p> </div> <div> <label for='r_pwd'>確認密碼</label> <p><input type="password" name="r_pwd" id="r_pwd"></p> </div> <div> <label for='email'>郵箱</label> <p><input type="email" name="email" id="email"></p> </div> <input type="submit"> </form> </body> </html>
然後我們來定義一個form 類,以及我們需要掌握的一些基礎知識,這些程式碼全部寫在 試圖頁面裡。
from django.shortcuts import render,HttpResponse from django.forms import widgets # Create your views here. from django.forms import widgets from django import forms #建立form表單驗證規則 class UserForm(forms.Form): name = forms.CharField(min_length=4), pwd = forms.CharField(min_length=6), r_pwd = forms.CharField(min_length=6), email = forms.EmailField(), def index(request): if request.method == 'POST': form = UserForm(request.POST) #如果輸入全部符合規則判斷為真將結果傳遞給 changed_data,並列印 print('form.is_vaild---------',form.is_valid()) if form.is_valid(): print(form.changed_data) #如果失敗,列印為真的值,列印錯誤,獲取錯誤字典中name 的錯誤值。 else: print(form.cleaned_data) print('錯誤資訊的型別---------',type(form.errors)) print(form.errors) print(form.errors.get('name')) return HttpResponse('ok') form=UserForm() return render(request,'index.html')
如果輸入正確的驗證資訊
後臺輸出
form.is_vaild--------- True
{'name': '召喚精靈', 'pwd': '1111111111', 'r_pwd': '1111111111', 'email': '[email protected]'}
可以看出輸入符合驗證條件的資料, is_vaild 會返回 True ,然後正確資訊會儲存到cleaned_data 中
下面輸入一下錯誤驗證資訊
form.is_vaild--------- False
錯誤資訊的型別--------- <class 'django.forms.utils.ErrorDict'>
獲取錯誤資訊字典 <ul class="errorlist"><li>name<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul>
可以看到型別是已字典到形式儲存到,然後咱們通過字典到的取值方法 get 取到驗證錯誤到報錯資訊。
如果同時有錯誤有正確會怎麼樣
form.is_vaild--------- False
{'pwd': '11111111111', 'r_pwd': '1111111111', 'email': '[email protected]'}
錯誤資訊的型別--------- <class 'django.forms.utils.ErrorDict'>
獲取錯誤資訊字典 <ul class="errorlist"><li>name<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul>
雖然驗證失敗了,但是cleaned_data中保留了正確的驗證資訊。
標籤渲染
方式一
<h3>方式一</h3> <form action="" method="post"> {% csrf_token %} <div> <label for="">使用者名稱</label> {{ form.name }} </div> <div> <label for="">密碼</label> {{ form.pwd }} </div> <div> <label for="">確認密碼</label> {{ form.r_pwd }} </div> <div> <label for=""> 郵箱</label> {{ form.email }} </div> <input type="submit" > </form>
方式二
需要給form驗證條件,新增 label屬性
class UserForm(forms.Form): name = forms.CharField(min_length=4,label='使用者名稱') pwd = forms.CharField(min_length=6,label='密碼') r_pwd = forms.CharField(min_length=6,label='確認密碼') email = forms.EmailField(label='郵箱')
<h4>方式二</h4> <form action="" method="post"> {% csrf_token %} {% for foo in form %} <div> <label for="">{{ foo.label }}</label> {{ foo }} </div> {% endfor %} <input type="submit">
方式三
<h4>方式三</h4> <form action="" method="post"> {% csrf_token %} {{ form.as_p }} <input type="submit"> </form>
小結:
雖然這三種標籤渲染的方式 第三種最為簡介方便,但是侷限性也最大,不能根據自己的需求調整標籤,只能使用他提供的方法,如果常用的話還是選擇第二種標籤渲染方式。