django-form表单验证

本文介绍如何使用Django的Form进行表单数据验证,包括CharField、EmailField、FloatField等常用字段的使用方法及错误信息处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用表单验证数据

常用的Field:
使用Field可以是对数据验证的第一步。你期望这个提交上来的数据是什么类型,那么就使用什么类型的Field。

CharField:
用来接收文本。
参数:

max_length:这个字段值的最大长度。
min_length:这个字段值的最小长度。
required:这个字段是否是必须的。默认是必须的。
error_messages:在某个条件验证失败的时候,给出错误信息。
EmailField:
用来接收邮件,会自动验证邮件是否合法。
错误信息的key:required、invalid。

FloatField:
用来接收浮点类型,并且如果验证通过后,会将这个字段的值转换为浮点类型。
参数:

max_value:最大的值。
min_value:最小的值。
错误信息的key:required、invalid、max_value、min_value。

IntegerField:
用来接收整形,并且验证通过后,会将这个字段的值转换为整形。
参数:

max_value:最大的值。
min_value:最小的值。
错误信息的key:required、invalid、max_value、min_value。

URLField:
用来接收url格式的字符串。
错误信息的key:required、invalid。

代码

from django.shortcuts import HttpResponse
from django import forms
import json
from django.http import JsonResponse

class AjaxForm(forms.Form):
    #只定义一个username字段,一会通过get获取
    username = forms.CharField(
        required=True,
        min_length=3,
        max_length=5,
        error_messages={
            "required":"用户名不能为空",
            "min_length": "用户名不能少于3位数",
            "max_length":"不能超过5",
        }
    )


def ajaxForm(request):
    if request.method == "GET":
        ret = {"status": "NG", "msg": None}
        af = AjaxForm(request.GET)
        if af.is_valid():
            # 清洁的数据?
            print(af.cleaned_data,"1111111111111111111111111111111")
            ret["status"] = "OK"
            return HttpResponse(json.dumps(ret))
        else:
            print("NG")
            ret["msg"] = af.errors
            return HttpResponse(json.dumps(ret))

"""
af.errors.as_ul() class 'django.utils.safestring.SafeText'>  默认就是这个,好像是一个html标签
af.errors.as_data()   <class 'dict'>
af.errors.as_json()   <class 'str'>

这样就可以灵活使用了,困扰了好久
"""

下面在来一个CharField的使用

forms.py

from django import forms

class UserAccountForm(forms.Form):
    #只定义一个username字段,一会通过get获取
    username = forms.CharField(
        required=True,min_length=3,max_length=9,
        error_messages={
            "required":"用户名不能为空",
            "min_length": "用户名不能小于3位",
            "max_length":"不能超过9位",}
    )

    password = forms.RegexField(
        required=True,min_length=6,max_length=15,
        regex=r"^\w+$",#只能数字 字母 下划线,否则输出 {'password': [ValidationError(['格式不正确'])]}
        error_messages={
            "required":"密码不能为空",
            "min_length": "密码至少6位",
            "max_length":"不能超过15位",
            "invalid":"格式不正确",
        }
    )

views.py


from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View

import json
# Create your views here.
class LoginView(View):
    def get(self, request):
        return HttpResponse('result')

    def post(self, request):
        from .forms import UserAccountForm
        uf = UserAccountForm(request.POST)
        if uf.is_valid():
            # 清洁的数据
            print("OK")
            print(uf.cleaned_data)
        else:
            # 错误信息字典
            print("NO")
            errmsg_dict = json.loads(uf.errors.as_json())
            print(errmsg_dict)
            print(json.dumps(errmsg_dict,ensure_ascii=False))
        return HttpResponse('post')
"""
uf.errors.as_ul() <class 'django.utils.safestring.SafeText'>
uf.errors.as_json() <class 'str'>
uf.errors.as_data() <class 'dict'> 但是这个字典有点问题
{'password': [ValidationError(['格式不正确'])]} 会出现这种
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值