Day 12 forms渲染错误信息

本文介绍了如何在Django中自定义表单验证错误信息,包括局部和全局错误消息的设置,以及如何使用clean方法实现字段验证。同时讲解了cookies和session在Django中的应用,以及如何读取、删除cookie。
摘要由CSDN通过智能技术生成

Day 12 forms渲染错误信息

一、forms渲染错误信息

1.创建py文件

2.撰写py文件

字段描述
  • initial="张三" # 设置默认值

  • ​ ``error_messages={“required”: “不能为空”,“invalid”: “格式错误”,“min_length”: “用户名最短8位”​ } 触发限制是返回的自定义的错误信息默认English

  • widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True)

  • # 把密码框设置为password类型,并指定class为c1和c2的样式类
    # 当出现出错时,其他类型的input框默认是保留你写的内容,只有密码框不会保存
    # 想要密码框错误时也保留内容,就设置render_value=True
    
from django import forms
from django.forms import widgets


class CheckUser(forms.Form):
    name = forms.CharField(label='名字', max_length=10,
                           min_length=3, required=True,
                           widget=widgets.TextInput(attrs={'class': 'form-control'}),
                           error_messages={'min_length': '用户名太少了'})
    password = forms.CharField(label='密码', max_length=18,
                               min_length=6, required=True,
                               widget=widgets.TextInput(attrs={'class': 'form-control'}),
                               error_messages={'min_length': '密码强度过低'})
    phone = forms.CharField(label='手机', max_length=11,
                            min_length=11, required=True,
                            widget=widgets.TextInput(attrs={'class': 'form-control'}),
                            error_messages={'max_length': '手机格式不对', 'min_length': '手机格式不对'})
    introduction = forms.CharField(label='简介', max_length=254,
                                   required=False, error_messages={'max_length': '简介过长'},
                                   widget=widgets.Textarea(attrs={'class': 'form-control'})
                                   )

3.在视图函数中应用

from app01 import myform


def index(request):
    forms = myform.CheckUser()
    if request.method == 'POST':
        data = request.POST
        forms = myform.CheckUser(data)
        if forms.is_valid():  # 校验通过
            print('校验通过准备存入数据库!')
            return redirect('http://www.baidu.com')
    return render(request, 'index.html', {'forms': forms})

4.模板文件

<div class="col-md-4 col-md-offset-4">
    <form action="" method="post">
        {% for form in forms %}
            <div class="form-group">
                <label for="">{{ form.label }}</label>
                {{ form }}
                <span style="font:10px rgba(194,0,0,0.79);list-style-type: none">{{ form.errors }}</span></div>
        {% endfor %}
        <input type="submit" class="btn btn-info text-center" value="注册">

    </form>
</div>

image-20201021164852921

修改错误信息

1.局部重写错误信息,哪个字段需要重写错误信息就在哪个字段设置

class LoginForm(forms.Form):
    username = forms.CharField(
        min_length=8,
        label="用户名",
        initial="张三",
        error_messages={
            "required": "不能为空",
            "invalid": "格式错误",
            "min_length": "用户名最短8位"
        }
    )
    pwd = forms.CharField(min_length=6, label="密码")

2.设置全局错误信息(把默认的错误信息由英文改成中文)
在settings.py里面设置
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'  # 把语言改成中文(汉字)

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'  # 时区改成亚洲上海

二、局部钩子和全局钩子

局部钩子的使用

1 在自定义的Form类中写 clean_字段名
2 取出字段的真正值,name=self.cleaned_data.get(‘name’)
3 判断自己的规则,如果判断失败,抛出ValidationError
4 如果通过,return name

局部钩子

image-20201021170059153

写了两个只有两个了

    def clean_name(self):
        name = self.cleaned_data.get('name')
        if name.startswith('sb'):
            raise ValidationError('不能以sb开头')
        else:
            # 校验通过
            return name
    
    def clean_phone(self):
        phone = self.cleaned_data.get('phone')
        if re.match('\d+', phone):
            return phone
        else:
            raise ValidationError('手机格式不对!')

image-20201021165821502

全局钩子

    def clean(self):
        password = self.cleaned_data.get('password')
        repassword = self.cleaned_data.get('repassword')
        if password == repassword:
            return self.cleaned_data
        else:
            raise ValidationError('两次密码不一致')

执行顺序,先走局部钩子再进行全局钩子

image-20201021183332279

三、cookie session token

1 https://www.cnblogs.com/liuqingzheng/articles/8990027.htmlp
    
2 cookie:客户端浏览器上的键值对
3 session:存在服务端的键值对
4 token:加密的键值对,如果放在客户端浏览器上,它就叫cookie,  服务端签发的加密字符串

head.{name:lqz,age:18}.eseetsweasdca

base64加码:

asdfasfd.asdfasdf.asdfasdfaeraew

后端校验:
用这个token去查我的账户余额,向银行发请求,银行校验通过,是银行给你的,---》返回你的余额
head.{name:lqz,age:18}.eseetsweasdca

head.{name:egon,age:18}.eseetsweasdca

四、Django中cookie的使用

def cookie_test(request):
    # 浏览器向我这个地址发一个请求,就在浏览器写入 name = lqz

    obj=HttpResponse('ok')
    obj.set_cookie('name','egon')  # 写入到浏览器了,在http响应头里:cookie: name=lqz
    obj.set_cookie('age','19')  # 写入到浏览器了,在http响应头里:cookie: name=lqz
    return obj


def get_cookie(request):

    print(request.COOKIES)
    print(request.COOKIES.get('name'))
    return HttpResponse('我拿了你传过来的cookie')


def delete_cookie(request):


    obj=HttpResponse('我删掉了你 name 这个cookie ')
    obj.delete_cookie('name')
    return obj
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值