[py][mx]django form验证-给db减压
2018-02-01 10:09
274 查看
django form认证-解压db压力
一般系统都需要前后端都验证前端验证容器逃逸破解,如通过js console口去发
试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力太大, 所以后端 先通过form验证,对其长度等验证通过后才db验证.
新建forms.py
forms.py里的字段要和前端的login表单字段name对应上users/forms.py
from django import forms class 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 UserProfile 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': "用户名或密码不符合规则"})
此时如果前端什么都不输入提交
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.errors return 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>
相关文章推荐
- django的form验证机制
- Django Form源码分析之BaseForm验证逻辑
- django admin ModelForm field 验证
- [py][mx]django的cookie和session操作-7天免登录
- [py][mx]django分页第三方模块django-pure-pagination
- Django--form验证及错误处理
- Python菜鸟之路:Django 数据验证之钩子和Form表单验证
- Django 博客项目02 Form验证+ 上传头像(预览)+Ajax用户注册
- [py][mx]django课程模型
- Django_form验证
- [py][mx]django添加后台课程机构页数据-图片上传设置
- 使用Django的ModelForm对表单进行自动验证(可自定义验证规则)
- django form 验证
- django 的ajax 请求,使用form的验证机制。
- Django之ModelForm验证
- [py][mx]django自带后台系统使用
- 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
- Django之form表单提交并验证
- Django学习系列之Form验证
- [py][mx]django城市-教学机构-教师模型设计