django form组件扩展

Posted hexintong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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))

 

以上是关于django form组件扩展的主要内容,如果未能解决你的问题,请参考以下文章

django—Form组件

django之forms组件

Django 框架篇: Django中的Form 组件

Django—分页器与form组件

Django Form 组件

Django框架之Form组件