django框架form组件的使用简单方法

服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息

form组件的3大功能:
1 验证(显示错误信息)
2 保留用户上次输入的信息
3 可以生成html标签

class A_Form(Form):
       字段=fields.字段类型(默认参数:required=True,widget=widgets.插件(attrs={}))
       常用字段:Charfield,RegexField,IntegerField,EmailField
       常用参数:max_length,min_length,
                         widget=widgets.Select(choices=models.Classes.objects.values_list('id','title'))
      error_messages={
              'required':'用户名不能为空',
              'max_length':'太长了',
              'min_length':'太短了',
                    }
      label='用户名',  # obj.t1.label
      disabled=False,              # 是否可以编辑
      label_suffix='--->',            # Label内容后缀
      help_text='。。。。。。',  # 提供帮助信息
        
      obj=A_Form(initial='')#生成空的html标签,含有默认值
      
      obj=A-Form(request.POST)#拿到浏览器请求,传入form做验证
      obj.is_valid()#判断验证是否通过
      obj.cleaned_data()#验证通过后的值  字典形式
      obj.errors   #form 返回的错误信息  是个对象   'obj.errors.字典.0 ' 获取第一个错误信息

1.obj=Form()form组件类实例化时找到类中所有的字段 把这些字段 变成组合成字典;

self.fields={‘user’:正则表达式1,‘pwd’:正则表达式2}

2.循环self.fields字典(自己写的字段)

for  k,v  in self.fields.items():

    K是user,pwd

   v是正则表达式

3.每次循环通过self.fields字典的键, 一个一个的去get前端POST提交的数据 得到用户输入数据;

input_value= request.post.get(‘k’)(所以form字段的名称,要和前端的name属性匹配)

4.每次拿到用户输入的数据 (input_value)和进行正则表达式匹配;

5.匹配成功flag=True 匹配失败flag=false,最后 return flag obj.is_valid=flag。

如果For自带的规则和正则满足不了验证需求,可在Form类中自定义方法,做扩展。

6.每个字段验证通过后,每个字段执执行self.clean_filelds函数(自定义 对Form类中的字段做单独验证,比如去数据库查询判断一下用户提交的数据是否存在?)

  1. 执行Form组件的clean_form方法进行整体验证!(既然每个字段都验证了,就可以对用户提交的数据做整体验证了!比如进行联合唯一的验证)

8.最后执行类似 clean_form的post_clean方法结束验证。(一般不使用post_clean做自定义过滤,clean_form方法完全可以解决)
form表单验证:

from django.shortcuts import render,HttpResponse,redirect
from django.forms import Form
from django.forms import fields

class Login(Form):
  #from验证规则 用户名 6-10字符  required不能为空
  name=fields.CharField(max_length=10,
          min_length=6,
          required=True,
           error_messages={
               'required':'用户名不能为空',  #error_messages参数 自定义错误信息
               'min_length':'太短了',
                'max_length': "太长了",
                           }

                          )
   # z注意name 必须和 from表单提交的一致,要么二则怎么对比校验呢
    pwd= fields.CharField(min_length=3,
          required=True,
          error_messages={
            'required': '密码不能为空',  # error_messages参数 自定义错误信息
            'min_length': '太短了',
            'max_length': "太长了",
     }
                        )
def index(request):
    if request.method=='GET':
        return render(request,'login.html')
    else:
        obj=Login(request.POST)  #把客户端提交来的form表单和 和匹配规则放在一起
        res=obj.is_valid()         #自动校验  给出结果 True 或者 False
        if res:                    #验证成功后obj.cleaned_data获取成功的数据,字典类型正好对应数据 的批量操作
            print(obj.cleaned_data)
            return redirect('http://www.baidu.com')                 
        else:
           return  render(request,'login.htm
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值