Django 中间件实现用户认证与IP频率限制
1.URL访问过滤
通过装饰器进行用户认证非常方便,但是在添加部分需要认证的功能时,就需要再次添加装饰器,如果通过中间件来实现,就不需要再进行添加的操作.
import re
LOGIN_URL = '/login/'
class MyLogin(MiddlewareMixin):
def process_request(self, request):
# 获取当前页面的路由
url = request.get_full_path()
path = request.path
print(path)
# 通过session判断是否登录
is_login = request.session.get('is_login')
# 判断当前页面是否是login页面
if not re.match(path, LOGIN_URL):
if not is_login:
# 如果没有登录,重定向到login页面
return redirect('/login/?next=%s' % url)
def process_response(self, request, response):
return response
2.做IP访问频率限制
为了防止某些IP恶意高频访问服务器,可以对这些IP进行限制,进行拦截.
import time
class OverTime(MiddlewareMixin):
def process_request(self, request):
# 获取客户端IP地址
IP = request.META.get('REMOTE_ADDR')
# 获取该IP地址的值,如果没有,给一个默认列表[]
lis = request.session.get(IP, [])
# 获取当前时间
curr_time = time.time()
# 判断操作次数是否小于3次
if len(lis) < 3:
# 如果小于3次,添加本次操作时间
lis.append(curr_time)
# 保存
request.session[IP] = lis
else:
# 如果本次操作时间减去第一次操作时间小于60秒,则不让其继续操作
if time.time() - lis[0] < 60:
return HttpResponse('操作过于频繁')
else:
# 如果大于60秒则交叉复制
lis[0], lis[1], lis[2] = lis[1], lis[2], time.time()
# 保存
request.session[IP] = lis
def process_response(self, request, response):
return response
Django 中间件实现用户认证与IP频率限制的更多相关文章
- django rest framework用户认证
django rest framework用户认证 进入rest framework的Apiview @classmethod def as_view(cls, **initkwargs): &quo ...
- django中间件 csrf auth认证
django中间件 能做全局访问频率限制,身份校验,黑名单,白名单 用法: 新建一个文件夹,文件夹新建一个py文件,文件中写如下代码 注意点:你写的类必须继续MiddlewareMixin from ...
- Django 中的用户认证
Django 自带一个用户认证系统,这个系统处理用户帐户.组.权限和基于 cookie 的 会话.本文说明这个系统是如何工作的. 概览 认证系统由以下部分组成: 用户 权限:控制用户进否可以执行某项任 ...
- 09 Django组件之用户认证组件
没有学习Django认证组件之前使用装饰器方法 from django.shortcuts import render, HttpResponse, redirect from app01.MyFor ...
- Django组件之用户认证组件
一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenticate( ...
- 使用django实现自定义用户认证
参考资料:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/ 直接拉到最后看栗子啦 django自定义用户认证(使用自 ...
- Django组件之用户认证
auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenticate( ...
- Django 学习之用户认证组件auth与User对象
一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个. 1 .authenticate() ...
- Django之auth用户认证
auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate() 提供 ...
随机推荐
- numpy之转置(transpose)和轴对换
转置(transpose)和轴对换 转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作). 转置有三种方式,transpose方法.T属性以及swapaxes方法. 1 .T,适用于一 ...
- [转]iOS系列译文:深入理解 CocoaPods
Cocoapods是 OS X 和 iOS 下的一个第三方库管理工具.你能使用CocoaPods添加被称作“Pods”的依赖库,并轻松管理它们的版本,而不用考虑当前的时间和开发环境. Cocoapod ...
- leetcode-796-Rotate String
题目描述: We are given two strings, A and B. A shift on A consists of taking string A and moving the lef ...
- 用Javac编译Java文件时出现“编码 GBK 的不可映射字符“的error
前提:JDK版本 >= 1.6会出现编译报错, 1.6前只会是警告 以下是javac的document: 遇到这种情况的原因是: 文件编码格式与编译器编译所选的encoding不同,有非英文字符 ...
- web服务的简单介绍及apache服务的安装
一,web服务的作用: 是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档.可以放置网站文件,让全世界浏览: 可以放置数据让全世界下载.目前最主流的三个Web服务器是Ap ...
- 关于 IsLocalUrl 方法的注意事项
用于判断是否为本地url的方法 Url.IsLocalUrl() 的注意事项: 此方法是以判断传入的url字符串的开头是否为 "/" 为依据来判断是否为本地url,所以如果传入的u ...
- Python的html解析器
转自https://blog.csdn.net/jqh2002_blog/article/details/24842217 其实比较不同的解析器对html的处理能力是有点麻烦的,因为它们处理的步骤并不 ...
- 服务端模拟http服务请求客户端
try { InputStream in = req.getInputStream(); int i = -1; ByteArrayOutputStream out = new ByteArrayOu ...
- lua-redis-parser module
https://github.com/openresty/lua-redis-parser 此模块主要是处理redis请求和响应的. local parser = require "redi ...
- selenium自动化测试用例需要关注的几点(二)
注:原文地址 UI映射 一个UI映射是一种机制,它存储所有的定位器的测试套件在一个地方,方便修改UI元素的路径标识符或改变在AUT.测试脚本,然后使用UI地图定位以被测试的元件.基本上,UI地图是一个 ...