码迷,mamicode.com
首页 > 其他好文 > 详细

django form组件扩展

时间:2018-09-03 18:28:12      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:ali   ISE   ane   integer   choices   field   信息   ajaxform   ror   

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组件扩展

标签:ali   ISE   ane   integer   choices   field   信息   ajaxform   ror   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!