用户名登陆时如何在后面加一个小红*_Django(登陆认证cookie和session、CBV视图添加装饰器、forms组件源代码)...

本文介绍了Django框架中forms组件的用途,包括数据校验、标签渲染和错误信息展示,并详细阐述了自定义分页器的实现步骤。同时,探讨了cookie和session的使用,以及视图函数CBV如何添加装饰器。内容涵盖了后端数据处理和前端展示的关键环节。

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

今日内容概要

  • forms组件源代码
  • cookie与session
  • 视图函数(CBV)如何添加装饰器
caa52ab75f355657e5738dbfd804ac47.png
https://www.zhihu.com/video/1252723707228504064

今日考题

"""

答案

1.简述自定义分页器的使用


现在根目录下创建一个utils文件夹,在里面创建一个python文件,拷贝源代码进去
修改参数,到自己想定制的分页器的数据

在后端先导入这个python文件
在后端创建一个函数,把所有的默认值的参数算出来,一个利用count算出,一个用
request.GET.get算出来,然后用这两个参数创建拷贝的类的对象
给对象直接用start和end来切片,最后return到前端

前端直接在需要地方写{{ obj.html_page }}


2.forms组件是干什么用的,它的主要功能有哪些功能,你能否
具体说说每个功能下都有哪些经常用到的方法及注意事项(越详细越好)


forms组件可以渲染标签,校验数据和展示数据
校验数据:
    pycharm里面有个python console 里面可以模拟校验数据
    方法有:obj.is_valid() 检验数据合法与否
          obj.cleanes_data  查看所有合法的数据
          obj.errors    查看不合法的数据,以及不合法的原因
    还有钩子函数:局部:只校验一个字段,全局:校验多个字段



渲染标签:
    后端先建造一个类。继承forms.From
    然后类里面建造好一个个的字段
    在前端直接{{ form }}可以拿到框,{{ form.label}} 可以拿到字段名字


展示数据:  一般用在提示报错信息上
    直接在在span里面{{ forms.errors.0 }}就可以,固定用法



3..forms组件钩子函数是干什么用的,如何编写,请举例说明,除
此之外forms组件还提供了哪些校验方法


钩子函数也是用来校验数据的,分局部和全局钩子函数
局部钩子: 在类里面定义函数
def clean_username(self):
    usernmae = self.cleaned_data.get('username')
    if '条件' in username:
        sele.add_error('username', '用户名不可以有条件')
    return username

全局钩子:
def clean(self):
    password = self.cleande_data.get('password')
    confirm_password = self.cleaned_data.get('confirm_password')
    if not confirm_password == password:
        self.add_error('confirm_password', '两次密码不一致')
    return cleaned_data

内容回顾

  • 自定义分页器的使用
"""
当你在项目中需要使用第三方的功能代码或者自己封装的一些功能代码
那么一般情况下都是会新建一个文件夹(utils)专门用来存储相关的代码
	该文件夹既可以建在全局 也可以在每个应用下都创建属于该应用独有的
	
封装代码的思路
	1.先用最粗燥的代码完成功能
	2.在功能完成的基础之上再去考虑优化
		1.先由面条版封装成函数
		2.再看看能不能封装成面向对象
		并不是说一定需要封装成面向对象的形式 要看情况
"""
# 代码无需掌握直接拷贝使用即可
# 后端使用
  book_queryset = models.Book.objects.all()  # 惰性查询
  current_page = request.GET.get('page',1)
  all_count = book_queryset.count()
  page_obj = Pagenation(current_page=current_page,all_count=all_count)
  page_queryset = book_queryset[page_obj.start:page_obj.end]
  # 只需要将page_obj,page_queryset传递给html页面即可
  
# 前端使用(自定义分页器需要使用bootstrap)
	{{ page_obj.page_html|safe }}
  • forms组件
"""
1.渲染标签
2.校验数据
3.展示信息
"""
from django import forms
class MyForm(forms.Form):
  username = forms.CharField(label='用户名',max_length=8,min_length=3)

# 校验数据
# 1 给类传字典
form_obj = MyForm({'username':'jason'})
# 2 判读数据是否合法
form_obj.is_valid()  # 只有所有的数据都符合条件才会为True
# 3 如何查看符合条件数据
form_obj.cleaned_data
# 4 如何查看不符合条件的以及原因
form_obj.errors
# 5 forms类中所有的字段默认都是必填的 
# 6 校验的数据可以多传但是不能少传

# 渲染标签
# 1 第一种
{{ form_obj.as_p }}
# 2 第二种
{{form_obj.username.label}}{{form_obj.username}}
# 3 第三种(常用)
{% for form in form_obj %}
	{{ form.label }}:{{ form }}
  <span>{{ form.errors.0 }}</span>
{% endfor  %}


# 展示错误信息
{% for form in form_obj %}
	{{ form.label }}:{{ form }}
  <span>{{ form.errors.0 }}</span>
{% endfor  %}

username = forms.CharField(label='用户名',
                           max_length=8,
                           min_length=3,
                           error_messages={
                             'required':"用户名必填",
                             ...
                           }
                   
                      )
  • 钩子函数
"""
局部钩子
	校验单个字段
全局钩子
	校验多个字段
"""
def clean_username(self):
  self.add_error('username','用户名错误')
  return username

def clean(self):
  return self.cleaned_data
  • 重要参数
label
min_length
max_length
required
initial
error_messages
validator
widget
"""
针对字段的校验有很多种
	1.最简单的min_length
	2.正则validator
	3.钩子函数

前端的校验的可有可无 但是后端的校验一点都不能含糊

form表单如何取消浏览器自动校验功能
	<form novalidate></form>
"""
  • 其他字段
radio
checkbox
select

forms组件源码

"""

cookie与session

"""

Cookie操作

# 虽然cookie是服务端告诉客户端浏览器需要保存内容

session操作

"""

CBV如何添加装饰器

from 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值