一、forms組件介紹
1 注冊功能,登錄功能,前端需要校驗(欄位長度,郵箱是否合法,,,) 2 前端校驗可以沒有,后端校驗是必須的,使用傳統方式 if判斷寫的很多 3 借助于forms組件,可以快速實作欄位的校驗 from django.forms import Form 或者from django import forms
二、forms校驗欄位功能
url.py
from django.urls import path from app01 import views urlpatterns = [ # path('admin/', admin.site.urls), path('register', views.register), ]
views.py
注意點:
1 呼叫is_valid()后,有form.errors和form.cleaned_data 2 form.cleaned_data不管成功與失敗,都會有值,不一定是傳入的值 3 form.errors看了原始碼,as_data,as_ul...
代碼:
from app01 import myforms def register(request): # 資料可以是從前端傳過來的,也可以是自己后臺的資料 # 我現在有以下資料 data=https://www.cnblogs.com/guojieying/archive/2020/10/20/{'name':'lqz','email':'[email protected]','age':900} # data=https://www.cnblogs.com/guojieying/archive/2020/10/20/{'email':'[email protected]','age':100} # data=https://www.cnblogs.com/guojieying/archive/2020/10/20/{'age':100} # 校驗資料是否合法 # 實體化得到form物件,把要校驗的資料傳入 form=myforms.MyForm(data) # 校驗資料:form.is_valid() 回傳布爾型別 if form.is_valid(): print('校驗通過') # 校驗通過的資料 print(form.cleaned_data) # 不一定是上面傳入的資料 else: print(form.cleaned_data) print('校驗失敗') # 哪個欄位失敗了?失敗的原因是什么 print(form.errors) print(type(form.errors)) from django.forms.utils import ErrorDict #### 重寫了__str__ print(form.errors.as_json()) print(form.errors.as_data()) # form.errors.as_ul() # 是為了渲染模板 return HttpResponse('ok')
myforms.py
from django import forms # 寫一個類,寫欄位 class MyForm(forms.Form): # 校驗這個欄位,最大長度是32,最小長度是3 name = forms.CharField(required=False, max_length=32, min_length=3,label='用戶名') email = forms.EmailField(label='郵箱')#required不寫默認=True,那么在校驗的時候就必須校驗,會顯示校驗失敗沒傳該欄位 age=forms.IntegerField(max_value=https://www.cnblogs.com/guojieying/archive/2020/10/20/200,min_value=0,label='年齡')
三、forms渲染模板功能
url.py myforms.py同form校驗欄位功能
views.py
from app01 import myforms def register(request): if request.method=='GET': form=myforms.MyForm() return render(request,'register.html',{'form':form}) elif request.method=='POST': # 資料校驗 form=myforms.MyForm(request.POST) if form.is_valid(): print('校驗通過,存資料庫') else: print(form.errors.as_data()) print('校驗失敗,回傳錯誤') return HttpResponse('ok')
register.py
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <hr> <h1>手動創建模板</h1> <form action="" method="post"> <p>用戶名:<input type="text" name="name"></p> <p>郵箱:<input type="text" name="email"></p> <p>年齡:<input type="text" name="age"></p> <p><input type="submit" value=https://www.cnblogs.com/guojieying/archive/2020/10/20/"提交"></p> </form> <hr> <h1>半自動渲染模板1</h1> <form action="" method="post"> <p>用戶名:{{ form.name }}</p> <p>郵箱:{{ form.email }}</p> <p>年齡:{{ form.age }}</p> <p><input type="submit" value=https://www.cnblogs.com/guojieying/archive/2020/10/20/"提交"></p> </form> <h1>半自動渲染模板2(用的最多)</h1> <form action="" method="post"> <p>{{ form.name.label }}--{{ form.name }}</p> <p>{{ form.email.label }}---{{ form.email }}</p> <p>{{ form.age.label }}---{{ form.age }}</p> <p><input type="submit" value=https://www.cnblogs.com/guojieying/archive/2020/10/20/"提交"></p> </form> <h1>半自動渲染模板3(用的最多)</h1> <form action="" method="post"> {% for foo in form %} <p>{{ foo.label }} :{{ foo }}</p> {% endfor %} <p><input type="submit" value=https://www.cnblogs.com/guojieying/archive/2020/10/20/"提交"></p> </form> <h1>全自動(了解)</h1> <form action="" method="post"> {# {{ form.as_ul }}#} {{ form.as_p }} {# <table>#} {# {{ form.as_table }}#} {# </table>#} <p><input type="submit" value=https://www.cnblogs.com/guojieying/archive/2020/10/20/"提交"></p> </form> </body> </html>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/183125.html
標籤:其他
上一篇:做站程序中域名注冊重要嗎?
