ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django基础011-form&modelform

2020-09-04 21:32:00  阅读:216  来源: 互联网

标签:return form 验证 data self 011 cleaned modelform def


1、form

from django import forms
from django.core.exceptions import ValidationError  #出现异常时用的
from user import models

#validators的先验证
#第一步验证
def test_phone(value):
    print('test_phone',3)
    if len(value) != 11:
        raise  ValidationError('手机号码格式不正确')#抛出异常
    else:
        return value


class ArticleForm(forms.Form):
    #字段名称要和提交的字段相同
    title = forms.CharField(required=True,#是否必填
                            validators=[test_phone],#自定义校验,公共校验,验证手机,邮箱
                            strip=False,#是否去掉输入的空格,默认为True
                            error_messages={#错误信息提示
                                'required':'必填参数未填',
                                'max_length':'最大10个字符',
                                'min_length':'最小5个字符'
                            })

    # 字段名称要和提交的字段相同
    # title = forms.CharField(required=True,  # 是否必填
    #                         max_length=10,  # 最大字符长度
    #                         min_length=5,  # 最小字符长度
    #                         strip=False,  # 是否去掉输入的空格,默认为True
    #                         error_messages={  # 错误信息提示
    #                             'required': '必填参数未填',
    #                             'max_length': '最大10个字符',
    #                             'min_length': '最小5个字符'
    #                         })

    #form 中的钩子函数
    #第三步对全局进行验证
    def clean(self):
        print('clean',1)
        # 通过 self.cleaned_data获取所有的数据
        return self.cleaned_data

    #针对个别字段进行验证
    #第二步对个别数据进行验证
    def clean_title(self):
        print('clean_title',2)
        #验证手机号是否是我们系统的
        return self.cleaned_data.get('title')
    def clean_content(self):
        pass

views.py中的代码块

from user.forms import ArticleForm,StudentForm
def add_article(request):
    if request.method == 'GET':
        return render(request,'post.html')
    else:
        article_obj = ArticleForm(request.POST)
        f = article_obj.is_valid()#获取校验结果
        if f:
            cleaned_data = article_obj.cleaned_data#校验通过后,结果会存在cleaned_data中,是个dict
            print(cleaned_data)
        else:
            print(article_obj.errors)
        return HttpResponseRedirect(article_obj.errors)

2、modelform

#  model + form
def test_name(value):
    if value == 'dsx':
        raise ValidationError('姓名不存在。')
    else:
        return value


class StudentForm(forms.ModelForm):
    # 当你觉得model写的验证规则不符合你的要求,可以像forms.Form 一样进行验证
    name = forms.CharField(validators=[test_name])

    class Meta:
        model = models.Student  # 创建类变量和model建立映射关系
        # fields = '__all__'  # 验证全部字段
        # fields = ['name']  # 显示指定列验证 只有指定的验证的字段才会出现在cleaned_data中
        exclude = ['age']  # 排除了就不会出现在cleaned_data中

    def clean(self):
        if self.cleaned_data.get('name') == 'ssz':
            raise ValidationError('姓名是射手座')
        else:
            return self.cleaned_data

    # 单个字段验证,必须要争在form中有些这个 字段
    def clean_name(self):
        if self.cleaned_data.get('name') == 'nhy':
            raise ValidationError('姓名是nhy')
        else:
            return self.cleaned_data.get('name')

views.py中的代码块

def student(request):
    if request.method == 'GET':
        return render(request,'student.html')
    else:
        studentObj = StudentForm(request.POST)
        f = studentObj.is_valid()
        if f:
            print('cleaned_data',studentObj.cleaned_data)
        else:
            print('errormsg',studentObj.errors)
        return HttpResponse('ok')

 

标签:return,form,验证,data,self,011,cleaned,modelform,def
来源: https://www.cnblogs.com/cjxxl1213/p/13616328.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有