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中if __name__ == '__main__'作用解析
Jun 29 Python
python&amp;MongoDB爬取图书馆借阅记录
Feb 05 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
使用pyecharts在jupyter notebook上绘图
Apr 23 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
python距离测量的方法
Mar 06 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
pandas string转dataframe的方法
Apr 11 Python
Django 连接sql server数据库的方法
Jun 30 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
Python Tkinter实例——模拟掷骰子
Oct 24 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自定义扩展名获取函数示例
2016/12/12 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
js DOM模型操作
2009/12/28 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python赋值操作方法分享
2013/03/23 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
解决python 文本过滤和清理问题
2019/08/28 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
竞聘上岗演讲稿范文
2014/01/10 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
西湖英语导游词
2015/02/06 职场文书
2015年组织部工作总结
2015/04/03 职场文书
Python 视频画质增强
2022/04/28 Python