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脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
Python模拟三级菜单效果
Sep 11 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
对python文件读写的缓冲行为详解
Feb 13 Python
Python3.5运算符操作实例详解
Apr 25 Python
Python turtle绘画象棋棋盘
Aug 21 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
python logging日志模块原理及操作解析
Oct 12 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
详解python itertools功能
2020/02/07 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
小学数学教学反思
2014/02/02 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
拉拉队口号
2014/06/16 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python