學習連接:http://www.cnblogs.com/haiyan123/p/7778888.htmlhtml
Form組件能夠作的幾件事情:python
一、用戶請求數據驗證jquery
二、自動生成錯誤信息 正則表達式
三、打包用戶提交的正確信息django
四、若是其中有一個錯誤了,其餘的正確這,保留上次輸入的內容函數
四、自動建立input標籤並能夠設置樣式學習
################################# views.py #################################### from django.shortcuts import render from django.shortcuts import redirect from django.shortcuts import HttpResponse from django import forms from django.forms import fields # 建立一個規則,建立的規則必須繼承Form class F1Form(forms.Form): #建立字段,本質上就是設定正則表達式 user = fields.CharField( max_length=18, // 字段條件 min_length=6, required=True, //是不是必填的 error_messages={'required': '用戶名不能爲空','max_length': '太長了','min_length': '過短了','invalid':'..'} //自定義錯誤內容 ) pwd = fields.CharField(required=True,min_length=32) age = fields.IntegerField( required=True ) email = fields.EmailField( required=True, min_length=8 ) # 下面就是使用規則了,將輸入框中的數據和規則進行正則匹配 def f1(request): if request.method == 'GET': obj = F1Form() return render(request,'f1.html',{'obj':obj}) else: obj = F1Form(request.POST) // 這個obj有用戶輸入的內容,也有錯誤提示信息 # 是否所有驗證成功,這裏咱們看一下Django中的Form組件的is_valid的校驗機制(https://www.cnblogs.com/aaronthon/p/9117439.html) #先來概括一下整個流程 #(1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase #(2)接着分析errors.裏面判斷_errors是都爲空,若是爲空返回self.full_clean(),不然返回self._errors #(3)如今就要看full_clean(),是何方神聖了,裏面設置_errors和cleaned_data這兩個字典,一個存錯誤字段,一個存儲正確字段。 #(4)在full_clean最後有一句self._clean_fields(),表示校驗字段 #(5)在_clean_fields函數中開始循環校驗每一個字段,真正校驗字段的是field.clean(value),怎麼校驗的無論 #(6)在_clean_fields中能夠看到,會將字段分別添加到_errors和cleaned_data這兩個字典中 #(7)結尾部分還設置了鉤子,找clean_XX形式的,有就執行。執行錯誤信息也會添加到_errors中 #(8)整個校驗過程完成 if obj.is_valid(): # 用戶提交的數據 print('驗證成功',obj.cleaned_data) return redirect('http://www.xiaohuar.com') else: print('驗證失敗',obj.errors) return render(request, 'f1.html',{'obj':obj}) ###################################################################### html 文件 ####################################################################### <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form id="fm" action="/f1.html" method="POST"> #<p><input type="text" name="user" />{{ obj.errors.user.0 }}</p> <p>{{ obj.user }}{{ obj.errors.user.0 }}</p> <p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p> <p>{{ obj.age }}{{ obj.errors.age.0 }}</p> <p>{{ obj.email }}{{ obj.errors.email.0 }}</p> <input type="submit" value="提交" /> </form> <script src="/static/jquery-3.1.1.js"></script> </body> </html> {{ obj.user }} 這個是爲了生成html代碼(就是上面的input框的html代碼) 由於若是使用上面的input框的代碼的話,在咱們輸入完全部內容後,點擊提交 全部框內的內容都消失了,只有了錯誤提示(正確的和錯誤的輸入數據都刷新了) obj.errors.user.0 這裏.0 的左右是,由於會可能有多個錯誤,那麼咱們拿第一條就能夠了