Django框架全面講解 Form

2021-08-22 05:57:19 字數 3276 閱讀 9754

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=))

# 舉個栗子

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',)

擴充套件: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 建立後...