HTML的form表單和django的form表單
django的表單系統(tǒng),分2種
- 基于django.forms.Form的所有表單類的父類
- 基于django.forms.ModelForm,可以和模型類綁定的Form
直接用原生的form表單,也可以直接用,較麻煩,
django的form表單,也可用可不要,
在views里創(chuàng)建一個(gè)類,繼承了forms.Form ,每個(gè)字段就是一個(gè)輸入框,
#-----
#django 的form表單
from django import forms
class MyForm(forms.Form):
#forms對(duì)應(yīng)的是前端的form表單,form 表單要驗(yàn)證的字段
#都與校驗(yàn)有關(guān)系,與數(shù)據(jù)庫(kù)沒(méi)有關(guān)系
#封裝性強(qiáng),可以 在前端指定顯示那些字段,label 是顯示指定的數(shù)據(jù),
user = forms.CharField(label="用戶名")#輸入的用戶名,
age = forms.IntegerField(label="年齡")
email = forms.EmailField()
#form注冊(cè)
def reg2(request):
# 實(shí)列化出一個(gè)form對(duì)象,傳到前端
form_obj = MyForm()
return render(request,"reg2.html",{"form_obj":form_obj})
在前端新建一個(gè)注冊(cè)頁(yè)面,前端渲染表單,是后端表單類實(shí)例出來(lái)的對(duì)象,用對(duì)象調(diào)用每個(gè)字段,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>form表單使用</h3>
<form action="/reg2/" method="post">
{# 渲染從后端傳來(lái)的變量,as_p 是段落#}
{% csrf_token %}
{# {{ form_obj.as_p }}#}
<p>姓名{{ form_obj.user }}</p>
<p>年齡{{ form_obj.age }}</p>
<p>郵箱{{ form_obj.email }}</p>
</form>
</body>
</html>
可以從瀏覽器的檢查元素中看到,瀏覽器自動(dòng)添加了一些東西,
<body> <h3>form表單使用</h3> <form action="/reg2/" method="post"> <input name="csrfmiddlewaretoken" value="GyY3KE5uM7HeErOEZ8OQFwUJYQYaknrOmavdmfufBuVOHdDSWfeHDyt2pjXarGAV" type="hidden"> <p>姓名<input name="user" required="" id="id_user" type="text"></p> <p>年齡<input name="age" required="" id="id_age" type="number"></p> <p>郵箱<input name="email" required="" id="id_email" type="email"></p> </form> </body>
如果在前端頁(yè)面隨便輸入就提交,前端會(huì)做校驗(yàn),這都是瀏覽器做的校驗(yàn),

可以自己定制,字段的錯(cuò)誤信息提示,和顯示信息,
#django 的form表單
from django import forms
class MyForm(forms.Form):
#forms對(duì)應(yīng)的是前端的form表單,form 表單要驗(yàn)證的字段
#都與校驗(yàn)有關(guān)系,與數(shù)據(jù)庫(kù)沒(méi)有關(guān)系
#封裝性強(qiáng),可以 在前端指定顯示那些字段,label 是顯示指定的數(shù)據(jù),require 是必須填寫的,
user = forms.CharField(label="用戶名",min_length=5,max_length=8)#輸入的用戶名,
age = forms.IntegerField(label="年齡",error_messages={"required":"必填",})
email = forms.EmailField()
#form注冊(cè)
def reg2(request):
errors_obj = " "
if request.method == "POST":
form_post = MyForm(request.POST)#拿到請(qǐng)求的所有數(shù)據(jù)
if form_post.is_valid():#判斷數(shù)據(jù)是否合法,返回布爾值,
print("data",form_post.cleaned_data)#獲取數(shù)據(jù),得到一個(gè)字典格式,
#添加數(shù)據(jù)庫(kù)
# User.objects.create_user()
# 實(shí)列化出一個(gè)form對(duì)象,傳到前端
#如果是輸入不合格式的信息,錯(cuò)誤信息,
else:
#獲取錯(cuò)誤信息
errors_obj = form_post.errors
# print("error",form_post.errors["user"][0])
# print("error",form_post.errors["age"])
# print("error",type(form_post.errors))#字典類型,
form_obj = MyForm()
return render(request,"reg2.html",{"form_obj":form_obj,"errors_obj":errors_obj})
在前端頁(yè)面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>form表單使用</h3>
<form action="/reg2/" method="post">
{# 渲染從后端傳來(lái)的變量,as_p 是段落#}
{% csrf_token %}
{# {{ form_obj.as_p }}#}
<p>姓名{{ form_obj.user }} <span>{{ errors.obj.user.0 }}</span> </p>
<p>年齡{{ form_obj.age }}<span>{{ errors.obj.age.0 }}</span></p>
<p>郵箱{{ form_obj.email }}<span>{{ errors.obj.email.0 }}</span></p>
<input type="submit">
</form>
</body>
</html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python進(jìn)行用戶畫像構(gòu)建的示例詳解
用戶畫像,又稱為用戶檔案或客戶畫像,是一種通過(guò)收集和分析用戶的行為、偏好、需求等多維度信息,本文主要介紹了如何使用Python進(jìn)行用戶畫像的構(gòu)建,需要的可以參考下2024-10-10
100行python代碼實(shí)現(xiàn)跳一跳輔助程序
這篇文章主要介紹了100行代碼實(shí)現(xiàn)跳一跳輔助程序,接下來(lái)要分享的是用“純軟件”的方法來(lái)玩“跳一跳”。本人只做過(guò)Android開發(fā),因此下面只給出Android平臺(tái)下的實(shí)現(xiàn)方法。需要的朋友可以參考下2018-01-01
Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn)
這篇文章主要介紹了Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
用 Python 元類的特性實(shí)現(xiàn) ORM 框架
利用 Python 元類的特性實(shí)現(xiàn) ORM 框架的 insert 功能,通過(guò)操作類對(duì)象,對(duì)數(shù)據(jù)表進(jìn)行數(shù)據(jù)增加操作。由于 ORM 比較復(fù)雜,也不要重復(fù)造輪子,就完成一個(gè) insert 相類似的ORM,理解其中的道理即可。2021-05-05
python錯(cuò)誤提示:Errno?2]?No?such?file?or?directory的解決方法
我相信很多人在學(xué)習(xí)Python的時(shí)候,特別是在open文件的時(shí)候總還碰到,還報(bào)錯(cuò)IOError:[Errno?2]沒(méi)有這樣的文件或目錄:'E://aaa.txt',這篇文章主要給大家介紹了關(guān)于python錯(cuò)誤提示:Errno?2]?No?such?file?or?directory的解決方法,需要的朋友可以參考下2022-02-02

