django中的form一般有兩種功能:
輸入html
驗證使用者輸入
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import re
from django import forms
from django.core.exceptions import validationerror
defmobile_validate
(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]$')
ifnot mobile_re.match(value):
raise validationerror('手機號碼格式錯誤')
class
publishform
(forms.form):
user_type_choice = (
(0, u'普通使用者'),
(1, u'高階使用者'),
)user_type = forms.integerfield(widget=forms.widgets.select(choices=user_type_choice,
attrs=))
title = forms.charfield(max_length=20,
min_length=5,
error_messages=,
widget=forms.textinput(attrs=))
memo = forms.charfield(required=false,
max_length=256,
widget=forms.widgets.textarea(attrs=))
phone = forms.charfield(validators=[mobile_validate, ],
error_messages=,
widget=forms.textinput(attrs=))
email = forms.emailfield(required=false,
error_messages=,
widget=forms.textinput(attrs=))
# 舉個栗子
def
publish
(request):
ret =
if request.method == 'post':
request_form = publishform(request.post)
if request_form.is_valid():
request_dict = request_form.clean()
print request_dict
ret['status'] = true
else:
error_msg = request_form.errors.as_json()
ret['error'] = json.loads(error_msg)
return httpresponse(json.dumps(ret))
利用form還可以自動生成前端的input標籤:
from django import forms
class
form1
(forms.form):
user = forms.charfield(
widget=forms.textinput(attrs=), # 給標籤新增屬性
error_messages=, # 自定義錯誤輸出
)pwd = forms.charfield(max_length=4, min_length=2)
email = forms.emailfield(error_messages=)
memo = forms.charfield(
widget=forms.textarea()
)# user_type_choice = (
# (0, '普通使用者'),
# (1, '高階使用者'),
# ) user_type_choice = models.booktype.objects.values_list("id", "caption")
# 這樣並不能跟資料庫實時同步,因為靜態欄位不更新
book_type = forms.charfield(
widget=forms.widgets.select(choices=user_type_choice)
)def
__init__
(self, *args, **kwargs):
super(form1, self).__init__(*args, **kwargs)
# 讓選項框跟資料庫進行實時聯動,解決上一行注釋的問題
self.fields['book_type'] = forms.charfield(
widget=forms.widgets.select(choices=models.booktype.objects.values_list("id", "caption"))
)
def
form1
(request):
if request.method == "post":
# 獲取請求做驗證
f = form1(request.post)
if f.is_valid():
print(f.cleaned_data)
else:
pass
# print(f.errors['user'][0])
# print(f.errors['pwd'][0])
return render(request, "form1.html", )
else:
f = form1()
return render(request, 'form1.html',)
lang="en">
charset="utf-8">
titletitle>
.input-group
.input-group
input
.input-group
span
style>
head>
action="/form/"
method="post">
class="input-group">
}}span>
div>
class="input-group">
}}span>
div>
class="input-group">
}}span>
div>
class="input-group">
}}span>
div>
class="input-group">
}}span>
div>
type="submit"
value="提交"/>
form>
div>
body>
html>
擴充套件:modelform
在使用model和form時,都需要對欄位進行定義並指定型別,通過modelform則可以省去from中字段的定義
class
adminmodelform
(forms.modelform):
class
meta:
model = models.admin
#fields = '__all__'
fields = ('username', 'email')
widgets = ),
}
Django框架全面講解
第一篇web框架 第二遍初識django 第三篇資料庫與orm 第四篇django之模板語言 第五篇django url name 詳解 第六篇 orm 操作大全 第七篇 django 認證系統 第八篇django分頁 第九篇 ajax 第十篇 form表單 第十一篇 中介軟體 第十二篇檢視層之檢視...
Django框架全面講解 admin
django amdin是django提供的乙個後台管理頁面,改管理頁面提供完善的html和css,使得你在通過model建立完資料庫表之後,就可以對資料進行增刪改查,而使用django admin 則需要以下步驟 建立後台管理員 配置url 註冊和配置django admin後台管理頁面1 建立後...
Django框架全面講解 模板
1.模板的執行 模版的建立過程,對於模版,其實就是讀取模版 其中巢狀著模版標籤 然後將 model 中獲取的資料插入到模版中,最後將資訊返回給使用者。view.py def index request return render request,index.html index.html 2.模板語...