Form 組件的學習

學習連接: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 的左右是,由於會可能有多個錯誤,那麼咱們拿第一條就能夠了
相關文章
相關標籤/搜索