首页 > 其他分享 >Django之forms组件内容,Django中间件

Django之forms组件内容,Django中间件

时间:2022-12-25 21:44:49浏览次数:38  
标签:obj form 中间件 校验 Django forms 组件

目录

Django之forms组件内容,Django中间件

今日内容概要

  • forms组件渲染标签
  • forms组件展示信息
  • forms组件校验补充
  • forms组件字段补充(参数补充)
  • forms组件源码分析
  • forms组件进阶用法(modelform组件)
  • django中间件

今日内容详细

forms组件渲染标签

<p>forms组件渲染标签的方式1(封装程度过高 扩展性查 主要用于本地测试):</p>
{{ form_obj.as_p }}
{{ form_obj.as_ul }}
{{ form_obj.as_table }}

    <p>forms组件渲染标签的方式2(封装程度过低 扩展性高 编写麻烦)</p>
    {{ form_obj.username.label }}
    {{ form_obj.username }}
    {{ form_obj.age.label }}
    {{ form_obj.age }}
    {{ form_obj.email.label }}
    {{ form_obj.email }}
    <p>forms组件渲染标签的方式3(封装程度较高 扩展性高,编写简单 推荐使用</p>
    {% for form in form_obj %}
        <p>
            {{ form.label }}
            {{ form }}
        </p>
    {% endfor %}
                       
'''
注意事项
	forms组件只负责渲染获取用户数据的标签 也就意味着form标签与按钮都需要自己写
	前端的校验是弱不禁风的 最终都需要后端来校验 所以我们在使用forms组件的时候可以直接取消前端帮我们的校验
	<form action="" novalidate>  # 这个参数表示前端不要做任何校验直接交给后端来,完全靠后端来,不写的话前端会帮我们校验,如果不满足他的设定校验规则会有提示
'''

forms组件展示信息

后端不同请求返回的forms对象一定要是相同的变量名
def ab_forms_func(request):
    # 1.产生一个空对象
    form_obj = MyForm()
    if request.method == 'POST':
        form_obj = MyForm(request.POST)  # request.POST可以看成一个字典 直接传给forms类校验 字典内无论有多少键值对都没事 只需要关心类中编写多少
        if form_obj.is_valid():  # 校验数据是否合法
            print(form_obj.cleaned_data)  # 能够看到所有合法的数据
        else:
            print(form_obj.errors)  # 不合法的数据错误原因打印
    # 2.将该对象传递给html文件
    return render(request, 'formPage.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内部真正的配置文件
    汉字修改:
    # LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'zh-hans'

forms组件校验补充

forms组件针对字段数据的校验 提供了三种类型的校验方式(可以一起使用)
	第一种类型:直接填写参数	max_length
    第二种类型:使用正则表达式
            validators=[
            RegexValidator(r'^[0-9]+$', '请输入数字'),
            RegexValidator(r'^159[0-9]+$', '数字必须以159开头'),
        ]
    第三种类型:钩子函数	编写代码自定义校验规则
    
    # 钩子函数>>>:校验最后一环 是在字段所有的校验参数之后触发
    # 局部钩子:每次只校验一个字段数据      校验用户名是否存在
    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_data.get('confirm_pwd')
        if not password == confirm_pwd:
            self.add_error('confirm_pwd', '两次密码不一致')
        return self.cleaned_data  # 勾出来全部,返回全部

forms组件参数补充

min_length			最小字符
max_length			最大字符
min_value			最小值
max_value			最大值
label				字段注释
error_manages		错误提示
validators			正则校验器
initial				默认值
required			是否必填(false不填)
widget				控制标签的各项属性
	widget=forms.widgets.PasswordInput(attrs={'class': 'form-control', 'username': 'jason'})
    widget=forms.widgets.PasswordInput()  # text=password
    widget=forms.widgets.TextInput()  # text=text

forms组件源码剖析

切入口:form_obj.is_valid()
课下自行研究

modelform组件

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

from django import forms
from app01 import models


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


def ab_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()  # models.UserInfo.objects.create(...)/update(...)
        else:
            print(modelform_obj.errors)
    return render(request, 'modelFormPage.html', locals())

Django中间件前戏

django默认有七个中间件 并且还支持用户自定义中间件
中间件主要可以用于:网站访问频率的校验(一段时间内访问次数多少,反爬程序) 用户权限的校验等全局类型的功能需求(VIP视频权限,老板账号和员工账号)

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',
]
'''我们还可以自己加中间件(保安)'''

Django中间件

如何自定义中间件
	1.创建存储自定义中间件代码的py文件或者目录(如果中间件很多)
    2.参考自带中间件的代码编写类并继承
    3.在类中编写五个可以自定义的方法
    	需要掌握的
        	process_request
            	1.请求来的时候会从上往下依次经过每一个注册了的中间件里面的该方法 如果没有则直接跳过
                2.如果该方法自己返回了HttpResponse对象那么不再往后执行而是直接原路返回(自定义的中间件返回HttpResponse)
            process_response
            	1.响应走的时候会从下往上依次经过每一个注册了的中间件里面的该方法 如果没有则直接跳过
                2.该方法有两个形参request和response 形参response指代的就是后端想要返回给前端浏览器的数据 该方法必须返回该形参 也可以替换
                '''如果在执行process_request方法的时候直接返回了HttpResponse对象 那么会原路返回执行process_response 不是执行所有'''
        需要了解的
        	process_view
            process_exception
            process_template_response
    4.一定要在配置文件中注册中间件才可以生效(就是那七个下边)

标签:obj,form,中间件,校验,Django,forms,组件
From: https://www.cnblogs.com/zpf1107/p/17004647.html

相关文章

  • django forms组件,model from组件
    djangoforms组件,modelfrom组件内容概要forms组件简单使用form组件渲染标签forms组件校验补充forms组件参数补充forms组件源码剖析modelfrom组件forms组件小需求......
  • django,多对多,序列化组件,ORM批量操作数据,自定义分页器
    django,多对多,序列化组件,ORM批量操作数据,自定义分页器多对多三种创建方式1.全自动classBook(models.Model):title=models.CharField(max_length=32)authors......
  • Django之SQL注入漏洞复现(CVE-2021-35042)
    前言SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露漏洞原理Django组件存在SQL注入漏......
  • forms组件用法
    forms组件作用日常生活中我们有很多需要输入的信息,前后端都是需要有校验规则的,以及用户输入错误时给予对应的提示信息。当然我们可以使用ajax绑定事件来获取后端的提示,......
  • Django-auth认证模块
    1.auth认证模块1.django自带一个admin路由,但是需要我们自己填写管理员账号和密码。如果想要是用django的admin后台管理,首先需要创建表(直接执行数据库迁移命令会默认产......
  • django中的字段、字段参数、orm操作、QuerySet相关方法:
    常用字段 AutoField自增的整形字段,必填参数primary_key=True,则成为数据库的主键。无该字段时,django自动创建。一个model不能有两个AutoField字段。IntegerField一个整数类......
  • 使用unittest和Django搭配写一个接口测试平台
    一、项目需求:每个测试项目下面有多个测试用例1.对测试项目的.增.删.改.查,查看该测试项目下面所有的测试用例.为该测试项目批量导入,添加测试用例2.对项目下的接口进行......
  • django中间件需要了解的方法 importlib模块 django操作cookie django操作session
    目录django中间件三个需要了解的方法process_viewprocess_exceptionprocess_template_response基于django中间件实现功能的插拔式设计importlib模块方式1:基于函数封装方式2......
  • django中只使用ModleForm的表单验证,而不使用ModleForm来渲染
    主题众所周知,django.forms极其强大,不少的框架也借鉴了这个模式,如Scrapy。在表单验证时,django.forms是一绝,也是面向对象的经典表现。但要用它来渲染表单那就不好玩了,除非写......
  • django中间件
    django中间件相当于django框架的保安,只要数据过来必须经过中间件的校验。django中间件默认有7个。可以在setings内MIDDLEWARE里查看看着是字符串其实底层就是导模块的......