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))
  • 相关阅读:
    什么是chaosmonkey?
    缓存中存在的三个问题及相关图解(图示解决方式) redis
    01 | 为什么说每个程序员都要尽早地学习并掌握设计模式相关知识?
    JMeter压测
    mysql 同步到 elasticsearch —— canal 1.1.4 demo
    流畅的python——14 可迭代的对象、迭代器和生成器
    流畅的python——11 接口:从协议到抽象基类
    流畅的python——13 正确重载运算符
    django.db.utils.OperationalError: (2026, 'SSL connection error: unknown error number')
    子线程开启后,发现主线程卡顿延迟
  • 原文地址:https://www.cnblogs.com/hexintong/p/9579864.html
Copyright © 2011-2022 走看看