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() 提供 ...
随机推荐
- POJ-2387-Til the Cows Come Home(最短路)
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 72844 Accepted ...
- Linux一些常用的基础命令,总结的很好,收藏了
原文地址:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html
- 1.Bootstrap简介
Bootstrap简介 BootstrapAPI: https://v3.bootcss.com Bootstrap优点: 响应式布局,一个框架,多种设备适用 Bootstrap 是最受欢迎的 HTM ...
- Android 开发者文档 -- 应用基础知识
https://developer.android.com/guide/components/fundamentals 应用基础知识 Android 应用采用 Java 编程语言编写.Android ...
- PowerBuilder中新建PBL
首先需要打开工作区间workspace , 然后选择你的第一个根pbl文件. 如图所示: 选择WorkSpace下的第一个application.PBT文件,然后单击鼠标右键,选择属性Properti ...
- (转载)一位资深程序员大牛给予Java初学者的学习建议
这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议? 今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要 ...
- Numpy随机数(一):超几何分布
超几何分布 产品抽样检查中经常遇到一类实际问题,假定在N件产品中有M件不合格品,即不合格率 . 在产品中随机抽n件做检查,发现k件不合格品的概率为 ,k=0,1,2,...,min{n,M}. Num ...
- L1-1 天梯赛座位分配
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...
- FlutterToast 使用
参看 FlutterToast 开源库 https://github.com/PonnamKarthik/FlutterToast
- windows本地提权——2003笔记
windows主机 用户有三种:Users,Administrator,System 本地拥有administrator权限用户提权到system用户 win2003: at命令 系统调度任务的指令, ...