Django学习 day68之Django第十四日

一 froms渲染错误信息

视图函数

from app01 import MyForm
def register(request):
    if request.method=='GET':
        form=myforms.MyForm()
        return render(request, 'register.html',{'form':form})
    else:
        form=myforms.MyForm(request.POST)
        if form.is_valid():
            return redirect('http://www.baidu.com')
        else:
            return render(request, 'register.html',{'form':form})

模板

 <form action="" method="post" novalidate>
	{% for foo in form %}
	<div class="form-group">
        <label for="">{{ foo.label }}</label>
            {{ foo }}
            <span class="text-danger pull-right">{{ foo.errors }}</span>
        </div>
	{% endfor %}
	<div class="text-center">
		<input type="submit" value="提交" class="btn btn-danger">
	</div>
</form>

二 forms组件参数配置

定制模板中的显示样式,及配置类 语法

记得先导入哦from django.form import widget

校验方法的参数加上widget=widgets.PasswordInput(attrs={'class': 'form-control'})

错误信息中文显示语法

校验方法的参数加上error_messages={'min_length': '太短了小伙子'}

综合案例:

class MyForm(forms.Form):
    # 校验这个字段,最大长度是32,最小长度是3
    name = forms.CharField(required=False, max_length=32, min_length=3, label='用户名',
                           widget=widgets.TextInput(attrs={'class': 'form-control'}),
                           error_messages={'min_length': '太短了小伙子'})
    password = forms.CharField(required=False, max_length=32, min_length=3, label='密码',
                               widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
                               error_messages={'min_length': '太短了小伙子'})
    re_password = forms.CharField(required=False, max_length=32, min_length=3, label='确认密码',
                                  widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
                                  error_messages={'min_length': '太短了小伙子'})
    email = forms.EmailField(label='邮箱', error_messages={'required': '小惠子,这个必填'},
                             widget=widgets.TextInput(attrs={'class': 'form-control'}))
    age = forms.IntegerField(max_value=200, min_value=0, label='年龄',
                             widget=widgets.TextInput(attrs={'class': 'form-control'}))
    text = forms.CharField(label='个人简介', widget=widgets.Textarea(attrs={'class': 'form-control'}))
    date = forms.CharField(label='出生日期', widget=widgets.DateInput(attrs={'class': 'form-control'}))

三 局部钩子和全局钩子

局部钩子的使用

  1. 在自定义的Form类中写 clean_字段名
  2. 取出字段的真正值,name=self.cleaned_data.get('name')
  3. 判断自己的规则,如果判断失败,抛出ValidationError(导入:from django.form import ValidationError)
  4. 如果通过,return name
  5. 钩子底层的执行顺序,字段一的基本校验–>字段一局部钩子–>字段二的基本校验->…–>最后一个才是全局钩子
    所以若想在局部钩子里对比校验两个字段,会有一个还未生成

局部钩子

def clean_name(self):
    # name对应的值,如何取到?
    name = self.cleaned_data.get('name')
    if name.startswith('sb'):
        # 不让校验通过
        raise ValidationError('不能以sb开头')
    else:
        # 校验通过,返回name
        return name

全局钩子

def clean(self):
    # name=self.cleaned_data.get('name')
    # print(name)
    password = self.cleaned_data.get('password')
    re_password = self.cleaned_data.get('re_password')
    if password == re_password:
        return self.cleaned_data
        # return {'lqz':"nb"}
    else:
        raise ValidationError('两次密码不一致')

四 cookie session token

  1. 点击此处看详细情报

  2. cookie:客户端浏览器上的键值对
    3 session存在服务端的键值对
    4 token加密的键值对,如果放在客户端浏览器上,它就叫cookie, 服务端签发的加密字符串
    后端校验:
    用这个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、付费专栏及课程。

余额充值