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减压相关推荐

  1. python Django Session,CSRF,Model操作,Form验证,中间件,缓存,信号

    Django Session,CSRF,Model操作,Form验证,中间件,缓存,信号 Session CSRF Model 操作 Form 验证 中间件 缓存 信号 1,Session 基于coo ...

  2. Django之Form验证clean方法(验证篇六)

    上一篇:Django之Form验证select的choice选项数据从数据库实时调用(验证篇五)点击跳转 目录篇:Django之Form及ModelForm目录篇 点击跳转 下一篇:django之mo ...

  3. python提交表单无效_使用Django Form解决表单数据无法动态刷新的两种方法

    一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为"多对多" from django.db import models class Class ...

  4. Django Form

    Form组件 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进 ...

  5. Django form表单

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  6. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  7. Django - Form和ModelForm

    一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 <! ...

  8. 总结django form

    总结django form 一.django forms 1.特点 django forms是Django的表单处理库.依赖HttpRequest,它具有如下特点: (1)快速自动生成HTML表单: ...

  9. 西游之路——python全栈——通用模块(pager、check_code、form验证)

    1.验证码 1 import random 2 from PIL import Image, ImageDraw, ImageFont, ImageFilter 3 4 _letter_cases = ...

最新文章

  1. 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
  2. 反浏览器指纹追踪(反浏览器指纹追踪技术)
  3. maven deploy plugin_学习Maven之Maven Surefire Plugin
  4. Linux free -m命令查看内存使用情况
  5. boost::multiprecision模块tommath相关的测试程序
  6. webpack使用教程
  7. python实现单例模式的三种方式及相关知识解释
  8. Linux中实现远程登录Xshell和Xftp
  9. SpringBoot xml层SQL update之foreach循环的坑
  10. 计组学习笔记(一):浮点数的表示和运算
  11. 黑客松Demo: Kata 的下一代镜像系统
  12. 【操作系统】代码实践:先来先服务调度算法(FCFS),短进程优先调度算法(SJF),高响应比优先调度算法(HRRN)
  13. 1223_MISRA_C规范学习_指针与数组的规则要求
  14. 基于hexo搭建github的个人静态博客
  15. 计算机应用基础演示文稿内容,计算机应用基础(PowerPoint 2003电子演示文稿系统)...
  16. 夜神模拟器apk安装方式
  17. 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件
  18. 我的学习笔记002--asp.net中的路径mxx
  19. Open RAN:3W1H法带你了解5G!
  20. Linux基础_软件包管理

热门文章

  1. 搜索引擎学习(四)中文分词器
  2. GradSearchCv 自定义验证集
  3. 【题解】Luogu P2783 有机化学之神偶尔会做作弊
  4. 在eclipse上Checkstyle的安装和使用
  5. 一个小小的知识点,关于强制类型转换
  6. TimeQuest学习总结
  7. 在线rss阅读聚合器lilina-0.7安装笔记
  8. ansible-playbook 手工编译安装nginx
  9. canvas做的图片查看器1
  10. spring 的jar包解释