[py][mx]django form验证-给db减压
django form认证-解压db压力
- 一般系统都需要前后端都验证
- 前端验证容器逃逸破解,如通过js console口去发
试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力太大, 所以后端 先通过form验证,对其长度等验证通过后才db验证.
新建forms.py
forms.py里的字段要和前端的login表单字段name对应上
users/forms.py
from django import formsclass LoginForm(forms.Form):username = forms.CharField(required=True)password = forms.CharField(required=True)
users/viewspy
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from django.shortcuts import render
from django.views.generic import View
# Create your views here.
from users.forms import LoginForm
from users.models import UserProfileclass UserView(View): # 新的login view. 继承了View类,它里面实现get post等方法, 使用类模式写免去了函数模式的判断def get(self, request):return render(request, "login.html", {})def post(self, request):login_form = LoginForm(request.POST) # 传递进来的字段先进行表单验证,如果规则通过在进入查库逻辑if login_form.is_valid():user_name = request.POST.get("username", "") # 字典取值,如果无,赋值为空pass_word = request.POST.get("password", "")user = authenticate(username=user_name, password=pass_word)if user is not None: # 用户名密码验证成功login(request, user) # django执行用户登录return render(request, "index.html")else:return render(request, "login.html", {'msg': "用户名或密码错误"})else:return render(request, "login.html", {'msg': "用户名或密码不符合规则"})
此时如果前端什么都不输入提交
debug模式看到
返回form报错到前端
users/views.py
class UserView(View): # 新的login view. 继承了View类,它里面实现get post等方法, 使用类模式写免去了函数模式的判断def get(self, request):return render(request, "login.html", {})def post(self, request):login_form = LoginForm(request.POST) # 传递进来的字段先进行表单验证,如果规则通过在进入查库逻辑if login_form.is_valid():user_name = request.POST.get("username", "") # 字典取值,如果无,赋值为空pass_word = request.POST.get("password", "")user = authenticate(username=user_name, password=pass_word)if user is not None: # 用户名密码验证成功login(request, user) # django执行用户登录return render(request, "index.html")else:return render(request, "login.html", {'msg': "用户名或密码错误"})else:return render(request, "login.html", {'msg': "用户名或密码不符合规则", "login_form": login_form}) # 将django的form验证失败内置信息发给前端展示用
templates/login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login</title>
</head>
<body>
<div><form action="/login/" method="post"><p><input type="text" name="username" placeholder="username"></p><p><input type="text" name="password" placeholder="password"></p><p><input type="submit"></p>{% csrf_token %}</form>{% if login_form.errors.username %}{% for key,value in login_form.errors.items %}{{ key }}: {{ value }}{% endfor %}{% endif %}{{ msg }}
</div>
</body>
</html>
也可以单独把erros提取出来返回给前端, 如error_msg = user_input_obj.errors
form有2个作用: 1, 验证 2,生成html(另一种写法了)
if user_input_obj.is_valid():#form验证通过...else:error_msg = user_input_obj.errorsreturn render(request, "user_list.html", {'obj': user_input_obj, 'errors': error_msg})#错误信息返回前端页面:<form action="/user_list/" method="post"><p>用户类型: {{ obj.user_type }} <span>{{ errors.user_type }}</span></p>....{% csrf_token %}</form>
转载于:https://www.cnblogs.com/iiiiiher/p/8397628.html
[py][mx]django form验证-给db减压相关推荐
- python Django Session,CSRF,Model操作,Form验证,中间件,缓存,信号
Django Session,CSRF,Model操作,Form验证,中间件,缓存,信号 Session CSRF Model 操作 Form 验证 中间件 缓存 信号 1,Session 基于coo ...
- Django之Form验证clean方法(验证篇六)
上一篇:Django之Form验证select的choice选项数据从数据库实时调用(验证篇五)点击跳转 目录篇:Django之Form及ModelForm目录篇 点击跳转 下一篇:django之mo ...
- python提交表单无效_使用Django Form解决表单数据无法动态刷新的两种方法
一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为"多对多" from django.db import models class Class ...
- Django Form
Form组件 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进 ...
- Django form表单
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Django Form和ModelForm组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Django - Form和ModelForm
一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 <! ...
- 总结django form
总结django form 一.django forms 1.特点 django forms是Django的表单处理库.依赖HttpRequest,它具有如下特点: (1)快速自动生成HTML表单: ...
- 西游之路——python全栈——通用模块(pager、check_code、form验证)
1.验证码 1 import random 2 from PIL import Image, ImageDraw, ImageFont, ImageFilter 3 4 _letter_cases = ...
最新文章
- 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
- 反浏览器指纹追踪(反浏览器指纹追踪技术)
- maven deploy plugin_学习Maven之Maven Surefire Plugin
- Linux free -m命令查看内存使用情况
- boost::multiprecision模块tommath相关的测试程序
- webpack使用教程
- python实现单例模式的三种方式及相关知识解释
- Linux中实现远程登录Xshell和Xftp
- SpringBoot xml层SQL update之foreach循环的坑
- 计组学习笔记(一):浮点数的表示和运算
- 黑客松Demo: Kata 的下一代镜像系统
- 【操作系统】代码实践:先来先服务调度算法(FCFS),短进程优先调度算法(SJF),高响应比优先调度算法(HRRN)
- 1223_MISRA_C规范学习_指针与数组的规则要求
- 基于hexo搭建github的个人静态博客
- 计算机应用基础演示文稿内容,计算机应用基础(PowerPoint 2003电子演示文稿系统)...
- 夜神模拟器apk安装方式
- 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件
- 我的学习笔记002--asp.net中的路径mxx
- Open RAN:3W1H法带你了解5G!
- Linux基础_软件包管理