Django 用户登陆访问限制实例 @login_required


Posted in Python onMay 13, 2020

在网站开发过程中,经常会遇到这样的需求:用户登陆系统才可以访问某些页面,如果用户没有登陆而直接访问就会跳转到登陆界面。

要实现这样的需求其实很简单:

1、在相应的 view 方法的前面添加 django 自带的装饰器 @login_required

2、在 settings.py 中配置 LOGIN_URL 参数

3、修改 login.html 表单中的 action 参数

# views.py
from djanco.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response
@login_required
 
def index(request):
return render_to_response('index.html')
# settings.py
....
LOGIN_URL = '/accounts/login/' # 根据你网站的实际登陆地址来设置
....

如果要使用 django 默认登陆地址,则可以通过在 urls.py 中添加如此配置:

# urls.py
....
url(r'^accounts/login/', views.login),
....
# login.html
<div class="container">
<form class="form-signin" action="/accounts/login/" method="post">
{% csrf_token %}
<!--csrf_token:生成令牌-->
<h2 class="form-signin-heading" align="center">登录系统</h2>
<label for="inputUsername" class="sr-only">username</label>
<input type="text" name="username" id="inputUsername" class="form-control" placeholder="username" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> 记住密码
</label>
</div>
<br />
<button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
<br />
<span style="color: red;">{{ login_err }}</span>
</form>
</div>
<!-- /container -->

补充知识:Django 之禁止特定的 IP访问系统

有时候我们上一些网站,或者用爬虫技术去爬,使用的次数很频繁,会被网站记录加入黑名单,当我们再次访问的时候会被提示,你不能访问该网址。

那么这个技术在 Django 里面如何实现呢?

我搜索了一些方法,找到的资料不多,有一些可能有效,但是没有可以直接运行 demo,那么这里就提供一种使用中间件的 demo,亲测有效。

自定义一个 middleware.py 文件,这个文件要在 Django 的 settings.py 配置文件中被引用,所以我放在与 settings.py 同文件夹的目录下。

middleware.py

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin # 1.10.x

class TestMiddleware(MiddlewareMixin):
 def process_view(self,request,view_func,*view_args,**view_kwargs):
  EXCLUDE_IPS = ['192.168.1.54']
  if 'HTTP_X_FORWARDED_FOR' in request.META:
   ip = request.META['HTTP_X_FORWARDED_FOR']
  else:
   ip = request.META['REMOTE_ADDR']
  if ip in EXCLUDE_IPS:
   return HttpResponse('<h1>您的ip被禁止</h1>')

其中,关于自定义中间件的函数名称例如 process_view() ,还有其它的例如 _init_ 之类在文档中有具体解释,这里只用到这个。

然后在 settings.py 中引入这个中间件:

settings.py

[
 'hunter.middleware.TestMiddleware',
]

其中 hunter 是我的系统的名称,在末尾添加即可。

然后重启我们的 Django 系统,就可以实现禁止特定 IP 访问的功能。

注意

这个 EXCLUDE_IPS 是我手动添加的一个列表,如果想对这个 IP 进行可持续发展的管理,可以在用户访问系统的时候记录下他们的 IP ,然后记录在 MySQL 数据库中,对其中的异常数据进行禁止的处理。

对于访问用户频繁访问、添加黑名单有很好的疗效,这里值得推荐。

以上这篇Django 用户登陆访问限制实例 @login_required就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
Python实现图片转字符画的示例代码
Aug 21 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python实现的自动发送消息功能详解
Aug 15 Python
python实现复制大量文件功能
Aug 31 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
Python中的四种交换数值的方法解析
Nov 18 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 #Python
PyQt5 控件字体样式等设置的实现
May 13 #Python
Python tkinter实现简单加法计算器代码实例
May 13 #Python
Django权限设置及验证方式
May 13 #Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 #Python
django自带的权限管理Permission用法说明
May 13 #Python
Python基于jieba, wordcloud库生成中文词云
May 13 #Python
You might like
各种战术和打法的原创者
2020/03/04 星际争霸
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
详解flask入门模板引擎
2018/07/18 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
Python 多进程、多线程效率对比
2020/11/19 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
J2EE系统只能是基于web
2015/09/08 面试题
光盘行动倡议书
2014/02/02 职场文书
技术比武方案
2014/05/19 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
《鲸》教学反思
2016/02/23 职场文书
Python django中如何使用restful框架
2021/06/23 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python