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之折腾一下目录
Oct 24 Python
python sort、sorted高级排序技巧
Nov 21 Python
在Lighttpd服务器中运行Django应用的方法
Jul 22 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
python 将md5转为16字节的方法
May 29 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python3 mmh3安装及使用方法
Oct 09 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
python实现双色球随机选号
Jan 01 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
Python图像处理之图像拼接
Apr 28 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下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
Three.js快速入门教程
2016/09/09 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
python实现无边框进度条的实例代码
2020/12/30 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
SQL面试题
2013/12/09 面试题
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
中学生校园广播稿
2014/01/16 职场文书
酒吧创业计划书
2014/01/18 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
2014年资料员工作总结
2014/11/18 职场文书
出生证明范本
2015/06/15 职场文书
关于教师节的广播稿
2015/08/19 职场文书
Python time库的时间时钟处理
2021/05/02 Python