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))
原文地址:https://www.cnblogs.com/hexintong/p/9579864.html