首页 > 其他 > 详细

django form组件扩展

时间:2018-09-03 18:19:08      阅读:187      评论:0      收藏:0      [点我收藏+]

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))

 

django form组件扩展

原文:https://www.cnblogs.com/hexintong/p/9579864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!