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中的from..import绝对导入语句
Jun 21 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
python3+selenium自动化测试框架详解
Mar 17 Python
python实现对输入的密文加密
Mar 20 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
python使用smtplib模块发送邮件
Dec 17 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.vs.JAVA
2016/04/29 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Python语言生成水仙花数代码示例
2017/12/18 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python实现udp传输图片功能
2020/03/20 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
本科生职业生涯规划书范文
2014/01/21 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
教学评估实施方案
2014/03/16 职场文书
拔河比赛口号
2014/06/10 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
校长创先争优承诺书
2014/08/30 职场文书
面试通知短信
2015/04/20 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书