一 form

1. form的作用

  1. 生成HTML代码
  2. 帮我们做数据有效性的校验
  3. 保留上次输入内容,显示错误提示

2. form组件校验数据有效性
  1. 内置的校验规则
  1. require=True 该字段必填
  2. max_length 该字段的最大长度
  3. min_length 该字段的最小长度

 

 2. 自定义校验规则
  1. 如手机号的格式 利用内置的正则校验器
  from django.core.validators import RegexValidator
  validators=[RegexValidator(r'^1[356789]\d{9}$', "手机号码格式不正确")],

 


3. 使用钩子函数做校验
 1. 局部钩子(hook)
           在form类内部定义一个 clean_字段名() 方法

 例子

  #自定义一个局部钩子函数含有alex的关键字不能提交
    def clean_title(self):
        value=self.cleaned_data.get("title")  #获取书名
        if "alex" in value:
            raise ValidationError("ALEX以备和谐")
        else:
            return value

 

 2. 全局钩子
       在form类内部定义一个 clean() 方法

4. form组合如何给html标签设置默认值

实例:关于使用form的例子,使用form之前可以自己写一个单独的form类,我这里一添加book为例:

1 form.py

 1 from django import forms
 2 from app01 import models
 3 from django.core.exceptions import ValidationError #注册功能
 4 from django.core.validators import RegexValidator # 检验手机号码是否正确
 5 
 6 # 自己定义一个form类
 7 class BookForm(forms.Form):
 8     title=forms.CharField(
 9         max_length=12,
10         min_length=2,
11         # 如果想让网页显示中文就加上label
12         label="书名",
13         initial="填写书名",
14         # 给tttle生成的input标签加上一个class类
15         widget=forms.widgets.TextInput(attrs={"class":"form-control"})
16     )
17     publisher_date=forms.DateField(
18         label="出版日期",
19         # widget 插件
20         widget=forms.widgets.DateInput(attrs={"type":"date","class":"form-control"})
21     )
22     phone=forms.CharField(
23         max_length=11,
24         validators=[RegexValidator(r'^1[356789]\d{9}$',"手机号码格式不正确")],  # 限制手机号格式
25         widget = forms.widgets.TextInput(attrs={"class": "form-control"})
26     )
27     # 用modelchoicefield可以实时显示到页面上面当数据库增加的时候
28     publisher = forms.ModelChoiceField(
29         queryset=models.Publisher.objects.all(),
30         widget=forms.widgets.Select(attrs={"class": "form-control"}),
31     )
32     authors=forms.ModelMultipleChoiceField(
33         queryset=models.Author.objects.all(),
34         widget=forms.widgets.SelectMultiple(attrs={"class": "form-control"})
35     )
36     #自定义一个局部钩子函数含有alex的关键字不能提交
37     def clean_title(self):
38         value=self.cleaned_data.get("title")  #获取书名
39         if "alex" in value:
40             raise ValidationError("ALEX以备和谐")
41         else:
42             return value
View Code

相关文章:

  • 2022-12-23
  • 2021-11-12
  • 2021-08-18
  • 2022-01-10
  • 2022-02-20
  • 2022-01-08
猜你喜欢
  • 2022-12-23
  • 2022-03-10
  • 2021-10-16
  • 2021-10-08
  • 2022-03-07
  • 2022-12-23
相关资源
相似解决方案