zoukankan      html  css  js  c++  java
  • django form组件扩展

    1简单扩展

      利用form组件自带的正则扩展:

        a.方式一

    from django.forms import Form
    from django.forms import widgets
    from django.forms import fields
    from django.core.validators import RegexValidator
    class MyForm(Form):
        user = fields.CharField(
            error_messages={'invalid': '...'},
            validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],
        )

        b.方式二

    from django.forms import Form
    from django.forms import widgets
    from django.forms import fields
    from django.core.validators import RegexValidator
     
    class MyForm(Form):
        user = fields.RegexField(r'^[0-9]+$',error_messages={'invalid': '...'})

    2基于源码流程

      a.单字段验证

    from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
    class AjaxForm(forms.Form):
        username = fields.CharField()
        user_id = fields.IntegerField(
            widget=widgets.Select(choices=[(0,'alex'),(1,'刘皓宸'),(2,'杨建'),])
        )
    # 自定义方法 clean_字段名
    # 必须返回值self.cleaned_data['username']
    # 如果出错:raise ValidationError('用户名已存在')
    def clean_username(self):
        v = self.cleaned_data['username']
        if models.UserInfo.objects.filter(username=v).count():
            # 整体错了
            # 自己详细错误信息
            raise ValidationError('用户名已存在')
        return v
    def clean_user_id(self):
        return self.cleaned_data['user_id']

        b.整体错误验证

    class AjaxForm(forms.Form):
        username = fields.CharField()
        user_id = fields.IntegerField(
            widget=widgets.Select(choices=[(0,'alex'),(1,'刘皓宸'),(2,'杨建'),])
        )
        # 自定义方法 clean_字段名
        # 必须返回值self.cleaned_data['username']
        # 如果出错:raise ValidationError('用户名已存在')
        def clean_username(self):
            v = self.cleaned_data['username']
            if models.UserInfo.objects.filter(username=v).count():
                # 整体错了
                # 自己详细错误信息
                raise ValidationError('用户名已存在')
            return v
        def clean_user_id(self):
            return self.cleaned_data['user_id']
    
        def clean(self):
            value_dict = self.cleaned_data
            v1 = value_dict.get('username')
            v2 = value_dict.get('user_id')
            if v1 == 'root' and v2==1:
                raise ValidationError('整体错误信息')
            return self.cleaned_data

    2 django序列化

      序列化 queryset的类型 需要用django自带的

    from django.core import  serializers
    import json
    def get_data(request):
        ret = {'status': True}
        userlist = models.Student.objects.all()
        ret['data'] = serializers.serialize('json', userlist)
        return HttpResponse(json.dumps(ret))
  • 相关阅读:
    IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
    Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
    RESTful API 设计指南
    Js计算当前日,当前周开始结束时间,当前月份,当前年份
    highcharts
    CSS布局 ——从display,position, float属性谈起
    CSS的选择器
    DOC窗口之cd命令(windows)
    Tomcat的启动与关闭以及启动时一闪而过的解决方法
    为什么安装jdk时,会安装两个jre?不用配置jre的环境变量
  • 原文地址:https://www.cnblogs.com/hexintong/p/9579864.html
Copyright © 2011-2022 走看看