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

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

Django 表单高级使用技巧

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


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

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

from django import formsclass 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 ModelFormfrom myapp.models import Authorclass 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 formsclass 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 ValidationErrorimport redef 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/

你可能感兴趣的文章
node不是内部命令时配置node环境变量
查看>>
node中fs模块之文件操作
查看>>
Node中的Http模块和Url模块的使用
查看>>
Node中自启动工具supervisor的使用
查看>>
Node入门之创建第一个HelloNode
查看>>
node全局对象 文件系统
查看>>
Node出错导致运行崩溃的解决方案
查看>>
Node响应中文时解决乱码问题
查看>>
node基础(二)_模块以及处理乱码问题
查看>>
node安装及配置之windows版
查看>>
Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
查看>>
Node提示:npm does not support Node.js v12.16.3
查看>>
Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
查看>>
Node服务在断开SSH后停止运行解决方案(创建守护进程)
查看>>
node模块化
查看>>
node环境下使用import引入外部文件出错
查看>>
Node读取并输出txt文件内容
查看>>
node防xss攻击插件
查看>>
noi 7827 质数的和与积
查看>>
NOIp2005 过河
查看>>