django中的form一般有兩種功能:
輸入html
驗證使用者輸入
# 舉個栗子#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import re
from django import forms
from django.core.exceptions import validationerror
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]$')
if not 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=))
利用form還可以自動生成前端的input標籤: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))
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',)
擴充套件: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框架全面講解 Form
django中的form一般有兩種功能 輸入html 驗證使用者輸入 usr bin env python3 coding utf 8 import re from django import forms from django.core.exceptions import validationer...
Django框架全面講解 admin
django amdin是django提供的乙個後台管理頁面,改管理頁面提供完善的html和css,使得你在通過model建立完資料庫表之後,就可以對資料進行增刪改查,而使用django admin 則需要以下步驟 建立後台管理員 配置url 註冊和配置django admin後台管理頁面1 建立後...