django实现自定义登陆验证
django实现自定义登陆验证
- 自定义装饰器函数和类
from utils.http import HttpResponseUnauthorized
from django.views import View # 登陆校验装饰器 函数视图校验
def login_require(func):
def wrapper(request): # 校验session中是否存在login_flag
login_flag = request.session.get('login_flag') if not login_flag:
return HttpResponseUnauthorized('用户未登录') result = func(request)
return result return wrapper # 登陆校验视图类 类视图校验
class LoginRequireMixin(View):
@classmethod
def as_view(cls, **initkwargs):
# 对父类的as_view进行改写并封装
view = super(LoginRequireMixin, cls).as_view(**initkwargs)
return login_require(view)HttpResponseUnauthorized
from django.http import HttpResponse class HttpResponseUnauthorized(HttpResponse):
status_code = 401- 具体使用
# 保存成绩
@login_require
def saveScore(request):
if request.method == 'POST': open_id = request.POST.get('open_id')
nickName = request.POST.get('nickName')
gameType = request.POST.get('gameType')
spendTime = request.POST.get('spendTime')
ageType = request.POST.get('ageType') if not all([open_id, nickName, gameType, spendTime, ageType]):
date = {'success': False, 'info': '请求数据不完整'}
return JsonResponse(date) if request.session.get('openId') != open_id:
data = {'success': False, 'info': '请求玩家和使用玩家不一致'}
return JsonResponse(data) Score(open_id=open_id, nickName=nickName, gameType=gameType, spendTime=spendTime, ageType=ageType).save()
data = {'success': True, 'info': '保存成功!'}
return JsonResponse(data) return HttpResponseForbidden('Method not allowed') # 分类成绩查询
class RankingQuery(LoginRequireMixin): def post(self, request):
queryType = request.POST.get('queryType')
offset = request.POST.get('offset') if not all([queryType, offset]):
data = {'success': False, 'info': '数据不完整'}
return JsonResponse(data) queryTypeRoute = {
'byScore': self.queryByScore
}
if queryType not in queryTypeRoute:
return HttpResponseBadRequest('unsupport queryType') func = queryTypeRoute['queryType']
data = func(offset) return JsonResponse(data)
django实现自定义登陆验证的更多相关文章
- Django自定义登陆验证后台
支持邮箱/手机号/昵称登录,在django1.6.2测试成功.1.models # -*- encoding: utf-8 -*- from django.db import models from ...
- Django之Cookie Session详解,CBV,FBV登陆验证装饰器和自定义分页
Cookie Session和自定义分页 cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接 ...
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...
- Django项目:CRM(客户关系管理系统)--38--30PerfectCRM实现King_admin编辑自定义字段验证
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- Django中间件(中间件版登陆验证、访问频率限制)
一.介绍 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. ...
- Cookie、Session登陆验证相关介绍和用法
一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...
- form表单使用(博客系统的登陆验证,注册)
先从小的实例来看form的用法 登陆验证实例,来看form的常规用法 1. forms.py # 用于登陆验证验证 from django.core.validators import RegexVa ...
- DRF JWT的用法 & Django的自定义认证类 & DRF 缓存
JWT 相关信息可参考: https://www.jianshu.com/p/576dbf44b2ae DRF JWT 的使用方法: 1. 安装 DRF JWT # pip install djang ...
- 自己写登陆验证及借用auth的is_authenticated验证是否登陆
一. 自己写登陆需要注册,一个session的处理,还有一个session的删除 #自定义一个闭包装饰器,来验证def checkLogin(func): def wrapper(request, * ...
随机推荐
- vue项目使用Vant框架Rem适配(postcss-pxtorem、lib-flexible )的安装使用
1.下载lib-flexible 使用的是vue-cli+webpack,通过npm来安装的 npm i lib-flexible --save 2.引入lib-flexible 在main.js中引 ...
- CSS核心概念之盒子模型
盒子模型(Box Model) 关于更多CSS核心概念的文章请关注GitHub--CSS核心概念. 当对一个文档进行布局的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型(CSS basi ...
- C++ for循环练习
#include <stdio.h> //题目:现有公鸡5元一只,母鸡3元一只,小鸡1元3只(小鸡不能单买 最少3只起卖),此时顾客有100元,请问有多少种购买方案. int main() ...
- java批量处理
最近用到Java批量处理,一次性处理多个文件夹下的多个文件,在此记录一下. 我的思路:首先要保证文件夹和文件夹下的文件的命名是有规律的,利用for循环,每次自增变量,再拼接字符串,从而得到各个文件的路 ...
- annaconda的安装及使用
一.安装 1.安装包下载: 方式1:官网:https://www.anaconda.com/distribution/ 方式2:清华镜像源:https://mirrors.tuna.tsinghua. ...
- MySQL笔记(6)-- SQL更新语句日志系统流程
一.背景 在上一篇[MySQL笔记(5)-- SQL执行流程,MySQL体系结构]中讲述了select查询语句在MySQL体系中的运行流程,从连接器开始,到分析器.优化器.执行器等,最后到达存储引擎. ...
- 面试刷题11:java系统中io的分类有哪些?
随着分布式技术的普及和海量数据的增长,io的能力越来越重要,java提供的io模块提供了足够的扩展性来适应. 我是李福春,我在准备面试,今天的问题是: java中的io有哪几种? java中的io分3 ...
- HBU-数据库第五周作业
第五周数据库作业 注意 MySQL的数据库名.表名.列名.别名大小写规则是这样的: 1.数据库名与表名是严格区分大小写的: 2.表的别名是严格区分大小写的: 3.列名与列的别名在所有的情况下均是忽略大 ...
- 学习笔记----C语言的面向对象
2020-03-26 21:27:17 面向对象的编程语言都有一个类的概念,像Java.python等.类是对特定数据的特定操作的集合体.它包含两个范畴:数据和操作.C语言是没有类的概念的,但是 ...
- oracle数据库表用序列实现主键自增长
原理注意:序列和触发器必须建立在同一个用户名下否则运行出错1.建立数据表create table 表名( userid number(10) primary key, ...