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 相关文章推荐
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
python分布式计算dispy的使用详解
Dec 22 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 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
我的php学习笔记(毕业设计)
2012/02/21 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
用cssText批量修改样式
2009/08/29 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
js性能优化技巧
2015/11/29 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
js实现全选反选不选功能代码详解
2019/04/24 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Django 自定义分页器的实现代码
2019/11/24 Python
大数据分析用java还是Python
2020/07/06 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
意大利团购网站:Groupon意大利
2016/10/11 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
初中班主任评语
2014/04/24 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
教室布置标语
2014/06/26 职场文书
公司文体活动总结
2015/05/07 职场文书
施工现场安全管理制度
2015/08/05 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android