前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >django 的form规则组件的笔记(附代码)

django 的form规则组件的笔记(附代码)

作者头像
一写代码就开心
发布2022-06-05 12:05:00
发布2022-06-05 12:05:00
98500
代码可运行
举报
文章被收录于专栏:java和pythonjava和python
运行总次数:0
代码可运行

目录

1 为什么要使用这个

因为我们后端要验证前段传过来的东西,不能只是前段进行验证

2 form案例

使用方法 1 写一个form.py文件

里面就是写对一个表的规则,比如用户登录的规则,对用户名密码的长度进行判断

代码语言:javascript
代码运行次数:0
运行
复制
from  django.forms  import Form
from  django.forms  import fields


# 定义登录的规则
class LoginForm(Form):
    username = fields.CharField(max_length=20,min_length=2,required=True)
    password = fields.CharField(max_length=20,min_length=2,required=True)

2 在登录的view里面的逻辑里面进行验证

代码语言:javascript
代码运行次数:0
运行
复制
def text(request):
    obj = LoginForm(request.POST)
    ret = obj.is_valid()  # 进行验证,返回true 和  false
    data = obj.cleaned_data  # 将前段传过来的东西变成一个字典

    if ret:
        print(ret)
        data = {
            "code": 200,
            "msg": data
        }
        return JsonResponse(data)
    else:
        print(obj.errors)
        data = {
            "code": 400,
            "msg": obj.errors  # 错误信息
        }
        return JsonResponse(data)

返回的错误信息是django自己的信息,我们想自定义错误信息

3 form 自定义错误信息

代码语言:javascript
代码运行次数:0
运行
复制
# 定义登录的规则
class LoginForm(Form):
    username = fields.CharField(
        max_length=5,
        min_length=2,
        required=True,
    error_messages={
        'required':'用户不能为空',
        'min_length':'最小长度是2',
        'max_length':'最大长度是5'
    })
    password = fields.CharField(max_length=20,min_length=2,required=True)

error_messages属性是键值对的形式,键是和其他属性一样,值就是自定义的错误信息

4 form内部原理

5 ajax传值

6 返回数据为json格式

前端ajax进行接收

7 验证格式错误

1 比如要验证前端传过来的是不是数字

2 验证邮箱

8 自定义正则表达式

代码语言:javascript
代码运行次数:0
运行
复制
    fields.RegexField('139\d+',error_messages={
   
        'invalid':'格式错误'
    })

9 form 内置字段

根据后台定义的这些,可以动态的生成html的标签,就是根据这些属性,进行动态的生成html标签

9.1 label=None

label=None, 用于生成Label标签或显示内容

就是在后端的form文件里面的某一个字段,里面有这个属性,那么将这个对象返回给前端,就可以直接显示,获取的方法是

动态的生成标签

9.2 label_suffix=None

label_suffix=None Label内容后缀

9.3 help_text=‘’,

help_text=‘’, 帮助信息(在标签旁边显示)

9.4 initial=None

initial=None, 初始值

9.5 obj.as_p

form 里面有多个字段,那么只要页面写这个as_p,那么就可以遍历多个字段进行展示了;

9.6 disabled=False,

disabled=False, 是否可以编辑

9.7 widget=None

widget=None, HTML插件

给页面渲染标签,到底是渲染input框,还是text框,还是下拉框,还是其他的,默认渲染input框;

我们在自定义admin后台的新增页面,或者修改页面的时候,就可以根据这个属性进行自定义标签形式;

10 widget属性可以定义html哪些插件

10.0 choices的选项可以从数据库中获取

  • 方式一:
代码语言:javascript
代码运行次数:0
运行
复制
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.validators import RegexValidator
 
class MyForm(Form):
 
    user = fields.ChoiceField(
        # choices=((1, '上海'), (2, '北京'),),
        initial=2,
        widget=widgets.Select
    )
 
    def __init__(self, *args, **kwargs):
        super(MyForm,self).__init__(*args, **kwargs)
        # self.fields['user'].widget.choices = ((1, '上海'), (2, '北京'),)
        # 或
        self.fields['user'].widget.choices = models.Classes.objects.all().value_list('id','caption')
  • 方式二:

使用django提供的ModelChoiceField和ModelMultipleChoiceField字段来实现

代码语言:javascript
代码运行次数:0
运行
复制
from django import forms
from django.forms import fields
from django.forms import widgets
from django.forms import models as form_model
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
 
class FInfo(forms.Form):
    authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())
    # authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all())

10.1 RadioSelect (单选框)

代码语言:javascript
代码运行次数:0
运行
复制
# 单radio,值为字符串
# user = fields.CharField(
#     initial=2,
#     widget=widgets.RadioSelect(choices=((1,'上海'),(2,'北京'),))
# )
 
# 单radio,值为字符串
# user = fields.ChoiceField(
#     choices=((1, '上海'), (2, '北京'),),
#     initial=2,
#     widget=widgets.RadioSelect
# )
 
# 单select,值为字符串
# user = fields.CharField(
#     initial=2,
#     widget=widgets.Select(choices=((1,'上海'),(2,'北京'),))
# )
 
# 单select,值为字符串
# user = fields.ChoiceField(
#     choices=((1, '上海'), (2, '北京'),),
#     initial=2,
#     widget=widgets.Select
# )
 
# 多选select,值为列表
# user = fields.MultipleChoiceField(
#     choices=((1,'上海'),(2,'北京'),),
#     initial=[1,],
#     widget=widgets.SelectMultiple
# )
 
 
# 单checkbox
# user = fields.CharField(
#     widget=widgets.CheckboxInput()
# )
 
 
# 多选checkbox,值为列表
# user = fields.MultipleChoiceField(
#     initial=[2, ],
#     choices=((1, '上海'), (2, '北京'),),
#     widget=widgets.CheckboxSelectMultiple
# )

10.2 SelectMultiple(下拉框多选)

10.3 Django内置插件:

代码语言:javascript
代码运行次数:0
运行
复制
TextInput(Input)
NumberInput(TextInput)
EmailInput(TextInput)
URLInput(TextInput)
PasswordInput(TextInput)
HiddenInput(TextInput)
Textarea(Widget)
DateInput(DateTimeBaseInput)
DateTimeInput(DateTimeBaseInput)
TimeInput(DateTimeBaseInput)
CheckboxInput
Select
NullBooleanSelect
SelectMultiple
RadioSelect
CheckboxSelectMultiple
FileInput
ClearableFileInput
MultipleHiddenInput
SplitDateTimeWidget
SplitHiddenDateTimeWidget
SelectDateWidget

10.4 NumberInput

页面上渲染生成的标签,只能输入数字

10.5 EmailInput

10.6 URLInput

10.7 PasswordInput

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 为什么要使用这个
  • 2 form案例
  • 3 form 自定义错误信息
  • 4 form内部原理
  • 5 ajax传值
  • 6 返回数据为json格式
  • 7 验证格式错误
  • 8 自定义正则表达式
  • 9 form 内置字段
    • 9.1 label=None
    • 9.2 label_suffix=None
    • 9.3 help_text=‘’,
    • 9.4 initial=None
    • 9.5 obj.as_p
    • 9.6 disabled=False,
    • 9.7 widget=None
  • 10 widget属性可以定义html哪些插件
    • 10.0 choices的选项可以从数据库中获取
    • 10.1 RadioSelect (单选框)
    • 10.2 SelectMultiple(下拉框多选)
    • 10.3 Django内置插件:
    • 10.4 NumberInput
    • 10.5 EmailInput
    • 10.6 URLInput
    • 10.7 PasswordInput
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档