Django中的Form & ModelForm

Django中的Form & ModelForm

在web开发中,处理表单是家常便饭,我们当然可以直接在模板中编写原生的html表单,然后在后端进行表单验证,这常常是一项繁琐的工作。

Form

我们可以通过Django提供了表单功能,来方便表单的处理。下面看一下如何使用:

  1. 自定义表单类

    from django import forms  # 导入表单模块
    from django.core.exceptions import ValidationError 
    
    class RegisterForm(forms.Form): # 自定义表单类,并继承forms.Form
      email = forms.EmailField(widget=forms.EmailInput( 
          attrs={
        "class": "form-control"}))
    
      username = forms.CharField(min_length=4, max_length=12, widget=forms.TextInput(
          attrs={
        "class": "form-control"}))
    
      password = forms.CharField(min_length=6, widget=forms.PasswordInput(
          attrs={
        "class": "form-control"}))
    
      password2 = forms.CharField(min_length=6, widget=forms.PasswordInput(
          attrs={
        "class": "form-control"}))
    
      valid_code = forms.CharField(widget=forms.TextInput(
          attrs={
        "class": "form-control"}))
    
      def __init__(self, request, *args, **kwargs):
          # 如果需要额外接收参数,要重写构造器函数
          # 这里额外接收一个参数,用于从request.sesssion中提取之前保存的验证码
          super(RegisterForm,self).__init__(*args, **kwargs) 
          self.request = request
    
      # 自定义方法(局部钩子),密码必须包含字母和数字
      def clean_password(self):
          if self.cleaned_data.get('password').isdigit() or self.cleaned_data.get('password').isalpha():
              raise ValidationError('密码必须包含数字和字母')
          else:
              return self.cleaned_data['password']
    
      def clean_valid_code(self):  # 检验验证码正确;之前生成的验证码保存在了了session中
          if self.cleaned_data.get('valid_code').upper() == self.request.session.get('valid_code'):
              return self.cleaned_data['valid_code']
          else:
              raise ValidationError('验证码不正确')
    
      # 自定义方法(全局钩子, 检验两个字段),检验两次密码一致;
      def clean(self):
          if self.cleaned_data.get('password') != self.cleaned_data.get('password2'):
              raise ValidationError('密码不一致')
          else:
              return self.cleaned_data
    
      # 注意,上面的字典取值用get, 因为假如在clean_password中判断失败,那么没有返回值,最下面的clean方法直接取值就会失败

    说明:

    1. min_length=4, max_length=12定义字段字符长度
    2. error_messages={"required":["请输入有效的......"]} 自定义错误信息
    3. widget参数用来指定字段的类型和属性;
    4. clean是验证函数,分为局部钩子和全局钩子;局部钩子clean_field用于验证单个字段,全局钩子clean用于验证两个字段;
    5. clean
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值