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中用于计算对数的log()方法
May 15 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
Python中Django 后台自定义表单控件
Mar 28 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
python爬虫爬取微博评论案例详解
Mar 27 Python
Python配置虚拟环境图文步骤
May 20 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
Python通过队列来实现进程间通信的示例
Oct 14 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+mysql留言本源码
2009/11/11 PHP
php实现水仙花数示例分享
2014/04/03 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
python3.5安装python3-tk详解
2019/04/26 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
python实现在线翻译功能
2020/03/03 Python
python安装及变量名介绍详解
2020/12/12 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
美国时尚女装在线:Missguided
2016/12/03 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
青年文明号口号
2014/06/17 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
总结高并发下Nginx性能如何优化
2021/11/01 Servers
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript