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

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

作者头像
一写代码就开心
发布2022-06-05 12:05:00
9520
发布2022-06-05 12:05:00
举报
文章被收录于专栏:java和pythonjava和python

目录

1 为什么要使用这个

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

2 form案例

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

在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
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
复制
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
复制
# 定义登录的规则
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
复制
    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
复制
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
复制
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
复制
# 单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
复制
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 归档