最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

热头条丨Django组件之form组件

来源:博客园


(相关资料图)

目录
  • Django组件之form组件
    • 一、form组件
    • 二、forms组件渲染标签
    • 三、forms组件展示信息
    • 四、forms组件校验补充
    • 五、forms组件参数补充
    • 六、modelform组件

Django组件之form组件

一、form组件

1.自动校验数据2.自动生成标签3.自动展示信息
from django import formsclass MyForm(forms.Form):    username = forms.CharField(min_length=3, max_length=8)  # username字段最少三个字符最大八个字符    age = forms.IntegerField(min_value=0, max_value=200)  # 年龄最小0 最大200    email = forms.EmailField()  # 必须符合邮箱格式

校验数据的功能(初识)

form_obj = views.MyForm({"username":"jason","age":18,"email":"123"})    form_obj.is_valid()  # 1.判断数据是否全部符合要求 只要有一个不符合结果都是False    form_obj.cleaned_data  # 2.获取符合校验条件的数据    {"username": "jason", "age": 18}    form_obj.errors  # 3.获取不符合校验规则的数据及原因    {"email": ["Enter a valid email address."]}
1.只校验类中定义好的字段对应的数据 多传的根本不做任何操作2.默认情况下类中定义好的字段都是必填的

二、forms组件渲染标签

方式1(封装程度过高 扩展性差 主要用于本地测试)

{{ form_obj.as_p }}{{ form_obj.as_ul }}{{ form_obj.as_table }}

方式2(封装程度过低 扩展性高 编写麻烦)

{{ form_obj.username.label }}{{ form_obj.username }}{{ form_obj.age.label }}{{ form_obj.age }}{{ form_obj.email.label }}{{ form_obj.email }}

方式3(封装程度较高 扩展性高 编写简单 推荐使用)

{% for form in form_obj %}    

{{ form.label }} {{ form }}

{% endfor %}
# 注意事项forms组件之负责渲染获取用户数据的标签 也就意味着form标签与按钮都需要自己写前端的校验是弱不禁风的 最终都需要后端来校验 所以我们在使用forms组件的时候可以直接取消前端帮我们的校验

三、forms组件展示信息

def ab_forms_func(request):    # 1.产生一个空对象    form_obj = MyForm()    if request.method == "POST":        # request.POST可以看成是一个字典直接传给forms类校验字典中无论有多少键值对都没关系只在乎类中编写的        form_obj = MyForm(request.POST)        if form_obj.is_valid():  # 校验数据是否合法            print(form_obj.cleaned_data)        else:            print(form_obj.errors)    # 2.将该对象传递给html文件    return render(request, "formsPage.html", locals())
{% for form in form_obj %}            

{{ form.label }} {{ form }} {{ form.errors.0 }}

{% endfor %}
# 错误信息提示的语言环境修改方式1:简单粗暴,直接在配置文件中修改语言环境from django.conf import global_settings  django内部真正的配置文件
# 错误信息提示的语言环境修改方式1:自定义内容 给字段对象添加errors_messages参数username = forms.CharField(min_length=3, max_length=8, label="用户名",                           error_messages={                               "min_length": "用户名最少三个字符",                               "max_length": "用户名最多八个字符",                               "required": "用户名不能为空"                           }                           )

四、forms组件校验补充

forms组件针对字段数据的校验 提供了三种类型的校验方式(可以一起使用)

第一种类型:直接填写参数   max_length第二种类型:使用正则表达式     validators第三种类型:钩子函数   编写代码自定义校验规则

钩子函数>>>:校验的最后一环 是在字段所有的校验参数之后触发

# 局部钩子:每次只校验一个字段数据 校验用户名是否已存在def clean_username(self):        username = self.cleaned_data.get("username")        if username == "jason":            self.add_error("username", "用户名jason已存在")        return username
# 全局钩子:一次可以校验多个字段数据 校验两次密码是否一致def clean(self):        password = self.cleaned_data.get("password")        confirm_pwd = self.cleaned_data.get("confirm_pwd")        if not password == confirm_pwd:            self.add_error("confirm_pwd", "两次密码不一致")        return self.cleaned_data

五、forms组件参数补充

min_length最小字符max_length最大字符min_value最小值max_value最大值label    字段注释error_messages错误提示validators正则校验器initial默认值required是否必填widget控制标签的各项属性

六、modelform组件

# modelform组件是forms组件的强化版本 更好用更简单更方便!!!from django import formsfrom app01 import modelsclass MyModelForm(forms.ModelForm):    class Meta:        model = models.UserInfo        fields = "__all__"        labels = {            "username":"用户名"        }def ab_mf_func(request):    modelform_obj = MyModelForm()    if request.method == "POST":        modelform_obj = MyModelForm(request.POST,instance=User_obj)        if modelform_obj.is_valid():            modelform_obj.save()  # models.UserInfo.objects.create(...)/update(...)        else:            print(modelform_obj.errors)    return render(request, "modelFormPage.html", locals())

关键词: 修改方式 配置文件 错误信息