首页 > 其他分享 >Django框架9

Django框架9

时间:2023-01-02 14:44:45浏览次数:36  
标签:obj 框架 form 校验 Django forms length 组件

今日内容概要

  • forms组件渲染标签
  • forms组件展示信息
  • forms组件校验补充
  • forms组件参数补充
  • forms组件源码剖析
  • modelform组件
  • django中间件

今日内容详细

forms组件渲染标签

方式1:封装程度过高 扩展性差 主要用于本地测试
	{{ form_obj.as_p }}	# 渲染为p标签
	{{ form_obj.as_ul }}	# 渲染为ul标签
	{{ form_obj.as_table }}	# 渲染为表格标签
方式2:封装程度过低 扩展性高 编写麻烦
	{{ form_obj.username.label }}
	{{ form_obj.username }}
	{{ form_obj.age.label }}
	{{ form_obj.age }}
	{{ form_obj.email.label }}
	{{ form_obj.email }}
"""
label属性默认展示的是类中定义的字段首字母大写的形式
也可以自己修改 直接给字段对象加label属性即可
     username = forms.CharField(min_length=3,max_length=8,label='用户名')
"""
方式3:封装程度较高 扩展性高 编写简单 推荐使用
	{% for form in form_obj %}
		<p>{{ form.label }}</p>
		<p>{{ form }}</p>
	{% endfor %}

注意事项
	forms组件只负责渲染获取用户数据的标签 也就意味着form标签与按钮都需要自己写
	前端的校验是弱不禁风的 最终都需要后端来校验 所以我们在使用forms组件的时候可以直接取消前端帮我们做的校验
	<form action="" novalidate>

forms组件展示信息

后端不同请求返回的forms对象一定要是相同的变量名
def forms_func(request):
    # 1.产生一个空对象
    form_obj = MyForm()
    if request.method == 'POST':
        fom_obj = MyForm(request.POST) # request.POST可以看成是一个字典 直接传给forms类校验 字典中无论有多少键值对都没有关系 只在乎类中编写的
        if form_obj.is_valid(): # 校验数据是否合法
            print(form_obj.cleaned_date)
        else:
            print(form_obj.errors)
    # 2.将该对象传递给html文件
    return render(request, 'formsPage.html', locals())


# 前端
{% for form in form_obj %}
            <p>
                {{ form.label }}
                {{ form }}
                <span>{{ form.errors.0 }}</span>
            </p>
{% endfor %}
针对错误信息的提示可以修改成各国语言

方式1:自定义内容
	给字段对象添加errors_messages参数即可
	username = forms.CharField(min_length=3, max_length=8, label='用户名',error_messages={
              'min_length': '用户名最少三个字符',
              'max_length': '用户名最多八个字符',
              'required': '用户名不能为空' })
方式2:修改系统语言环境
	from django.conf import global_settings  # django内部真正的配置文件

forms组件校验补充

forms组件针对字段数据的校验 提供了三种类型的校验方式(可以一起使用)
	第一种类型:直接填写参数		max_length
	第二种类型:使用正则表达式		validators
	第三种类型:钩子函数			编写代码自定义校验规则

钩子函数>>>:校验的最后一环 是在字段所有的校验参数之后触发
class MyForm(forms.Form):
    username = forms.CharField(min_length=3, max_length=8)
    password = forms.CharField(min_length=3, max_length=8)
    confirm_pwd = forms.CharField(min_length=3, max_length=8)
    
    局部钩子:每次只校验一个字段数据
    def clean_username(self):
        username = self.cleaned_data.get('username')
        if username == 'jason':
            self.add_error('username', '用户名jason已经存在')
        return username # 校验了哪个字段 就要把哪个字段返回出去

    全局钩子:一次可以校验多个字段数据
    def clean(self):
        password = self.cleaned_data.get('password')
        confirm_pwd = self.cleaned_date.get('confirm_pwd')
        if not password == confirm_pwd:
            self.add_error('confirm_pwd', '两次密码不一致')
        return self.cleaned_date # 要将所有的字段返回出去

forms组件参数补充

min_length				最小字符
max_length				最大字符
min_value				最小值
max_value				最大值
label					字段注释
error_messages			错误提示
validators				正则校验器
initial					默认值
required				是否必填
widget					控制标签的各项属性

modelform组件

'''
我们学习校验性组件的目的 绝大部分是为了数据录入数据库之前的各项审核
forms组件使用的时候需要对照模型类编写代码 不够方便
'''

forms组件的强化版本 更好用更简单更方便

from django import forms
from app01 import models


class MyModelForm(forms.ModelsForm):
    class Meta:
        model = models.UserInfo
        fields = '__all__'
        labels = {'username': '用户名'}


def mf_func(request):
    modelform_obj = MyModelForm()
    if request.method == 'POST':
        modelform_obj = MyModelForm(request.POST,instance=User_obj)
        if modelform_obj.is_valid():
            modelform_obj.save()
        else:
            print(modelform_obj.errors)
    return render(request, 'modelFormPage.html', locals())

django中间件

django默认有七个中间件 并且还支持用户自定义中间件
中间件主要可以用于:网站访问频率的校验 用户权限的校验等全局类型的功能需求

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

如何自定义中间件
	1.创建存储自定义中间件代码的py文件或者目录
	2.参考自带中间件的代码编写类并继承
	3.在类中编写五个可以自定义的方法
	4.一定要在配置文件中注册中间件才可以生效

需要掌握的三种方法
	process_request
	1.请求来的时候从上往下依次经过每一个注册了的中间件里面的该方法 如果没有则直接跳过
	2.如果该方法自己返回了HttpResponse对象 那么不再往后执行 而是直接原路返回
	process_response
	1.响应走的时候回从下往上依次经过每一个注册了的中间件里面的该方法 如果没有则直接跳过
	2.该方法有两个形参 request和response 形参response指代的就是后端想要返回给前端浏览器的数据 该方法必须返回该形参 也可以替换
'''如果在执行process_request方法的时候直接返回了HttpResponse对象 那么会原路返回执行process_response 不是执行所有的'''

需要了解的
	provess_view
	process_exception
	process_template_response

标签:obj,框架,form,校验,Django,forms,length,组件
From: https://www.cnblogs.com/lzjjjj/p/17019885.html

相关文章

  • django12
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻 eg:英语四六级考试需要网上先缴......
  • Django框架11
    今日内容概要csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式auth认证模块今日内容详细csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站......
  • Django基础
    Django基础一、Django简介以及基本使用二、Django与数据库连接三、Django路由层四、Django视图层五、Django模板层六、Django模型层七、Django组件之Ajax请求八、......
  • 大数据趣味学习探讨(一):学习框架的重要性
    文章目录​​学习框架的重要性​​​​一、痛点​​​​二、规则vs元规则​​​​三、无穷无尽的新问题​​​​四、感悟​​学习框架的重要性框架类似底层方法论,有人说学习......
  • Django中models的字段
    常见的field类型:1.AutoField自增字段,它是一个根据ID自增长的IntegerField字段,通常不用自己设置,如果没有设置主键,django会自动添加它为主键字段2.CharField(max_length=n......
  • gluon 基于浏览器+nodejs 的桌面应用开发框架
    gluon基于浏览器+nodejs的桌面应用开发框架,好处是相对轻量,只使用系统浏览器,对于nodejs可以支持包含以及不包含模式目前支持chrome以及firfox浏览器器,打包的应用相对比......
  • Django中render()函数和redirect()函数
    render()作用:render是渲染变量(结合一个给定的模板和一个给定的上下文字典)在模板中,通俗点将context的内容,加载进模板中定义的文件,通过浏览器渲染呈现。render()方法常用的......
  • Go语言微服务框架go-micro(入门)
    Micro用于构建和管理分布式系统,是一个工具集,其中go-micro框架是对分布式系统的高度抽象,提供分布式系统开发的核心库,可插拔的架构,按需使用简单示例编写protobuf文件:synt......
  • 【博学谷学习记录】超强总结,用心分享。spring框架一些重要知识点。
    1.1Spring的两大核心是什么?谈一谈你对IOC的理解?谈一谈你对DI的理解?谈一谈你对AOP的理解? 1.Spring的两大核心是:IOC(控制反转)和AOP(面向切面编程)DI(依赖注入)2.......
  • Django之csrf校验 CBV加装饰器以及auth认证模块
    目录Django之csrf校验CBV加装饰器以及auth认证模块一、csrf跨站请求伪造二、csrf校验策略(在提交数据的位置添加唯一标识)三、CBV加装饰器四、auth认证模块五、auth认证......