博客
关于我
Django基础(9): 表单Forms的高级使用技巧
阅读量:214 次
发布时间:2019-02-28

本文共 3208 字,大约阅读时间需要 10 分钟。

Django 表单高级使用技巧

Django 的表单系统功能强大,除了基本的表单创建和验证功能外,还提供了许多高级功能。以下是一些实用的表单操作技巧,帮助你更高效地开发和维护表单。


1. 自定义字段属性和错误信息

对于每个字段,你可以设置其是否为必需、最大长度和最小长度等属性。你还可以针对每个属性自定义错误信息。

from django import forms
class LoginForm(forms.Form):
username = forms.CharField(
required=True,
max_length=20,
min_length=6,
error_messages={
'required': '用户名不能为空',
'max_length': '用户名长度不得超过20个字符',
'min_length': '用户名长度不得少于6个字符',
}
)
password = forms.CharField(
required=True,
max_length=20,
min_length=6,
error_messages={
'required': '密码不能为空',
'max_length': '密码长度不得超过20个字符',
'min_length': '密码长度不得少于6个字符',
}
)

对于继承 ModelForm 的表单,可以在 Meta 类中设置错误信息:

from django.forms import ModelForm
from myapp.models import Author
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
widgets = {
'name': Textarea(attrs={'cols': 80, 'rows': 20}),
}
labels = {
'name': _('Author'),
}
help_texts = {
'name': _('Some useful help text.'),
}
error_messages = {
'name': {
'max_length': _('This writer's name is too long.'),
},
}

2. 自定义表单输入的 widget 和 CSS 属性

每个字段都可以选择自定义的输入 widget,如多选、复选框。你还可以定义每个 widget 的 CSS 属性。

from django import forms
class ContactForm(forms.Form):
name = forms.CharField(
max_length=255,
widget=forms.Textarea(
attrs={'class': 'custom'},
),
)

常见的 widget 类包括:

  • TextInput:用于单行文本输入。
  • Textarea:用于多行文本输入。
  • Select:用于下拉菜单。
  • CheckboxSelectMultiple:用于多选框。
  • RadioSelect:用于单选框。

3. 表单数据初始化和实例化

有时我们需要对表单设置一些初始数据。可以通过 initial 方法实现。

form = ContactForm(initial={
'name': 'First and Last Name',
})

对于 ModelForm,可以结合现有对象的数据进行实例化:

contact = Contact.objects.get(id=1)
form = ContactForm(instance=contact)

对于自定义表单,可以设置 default_data

default_data = {
'name': 'John',
'email': 'someone@hotmail.com',
}
form = ContactForm(default_data)

4. 自定义表单验证 validators

除了通过 clean 方法自定义验证外,还可以选择自定义 validators。例如,验证手机号码格式:

from django.core.exceptions import ValidationError
import re
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$)')
if not mobile_re.match(value):
raise ValidationError('手机号码格式错误')
class UserInfo(forms.Form):
email = forms.EmailField(error_messages={
'required': u'邮箱不能为空',
})
mobile = forms.CharField(
validators=[mobile_validate],
error_messages={
'required': u'手机不能为空',
}
)
widget=forms.TextInput(
attrs={
'class': "form-control",
'placeholder': u'手机号码',
},
)

5. 一个页面同时提交2张或多张表单

很多情况下,我们希望用户在同一页面上点击一个按钮能同时提交2张或多张表单。可以在模板中为每个表单取不同的名字,如 form1form2

if request.method == 'POST':
form1 = Form1(request.POST, prefix="form1")
form2 = Form2(request.POST, prefix="form2")
if form1.is_valid() or form2.is_valid():
# 处理逻辑
else:
form1 = Form1(prefix="form1")
form2 = Form2(prefix="form2")

以上是一些常用的 Django 表单高级使用技巧,希望对你有所帮助!

转载地址:http://qntp.baihongyu.com/

你可能感兴趣的文章
npm 下载依赖慢的解决方案(亲测有效)
查看>>
npm 安装依赖过程中报错:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
查看>>
npm.taobao.org 淘宝 npm 镜像证书过期?这样解决!
查看>>
npm—小记
查看>>
npm上传自己的项目
查看>>
npm介绍以及常用命令
查看>>
NPM使用前设置和升级
查看>>
npm入门,这篇就够了
查看>>
npm切换到淘宝源
查看>>
npm切换源淘宝源的两种方法
查看>>
npm前端包管理工具简介---npm工作笔记001
查看>>
npm包管理深度探索:从基础到进阶全面教程!
查看>>
npm升级以及使用淘宝npm镜像
查看>>
npm发布包--所遇到的问题
查看>>
npm发布自己的组件UI包(详细步骤,图文并茂)
查看>>
npm和package.json那些不为常人所知的小秘密
查看>>
npm和yarn清理缓存命令
查看>>
npm和yarn的使用对比
查看>>
npm如何清空缓存并重新打包?
查看>>
npm学习(十一)之package-lock.json
查看>>