Django框架全面講解 Form

2021-08-13 17:28:11 字數 3968 閱讀 2422

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.模板語...