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 正则式 概述及常用字符
May 07 Python
Python连接mssql数据库编码问题解决方法
Jan 01 Python
python实现合并两个数组的方法
May 16 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
元组列表字典(莫烦python基础)
Apr 03 Python
python中的句柄操作的方法示例
Jun 20 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
解决python3安装pandas出错的问题
May 20 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提取字符串中网站url地址的方法
2014/12/03 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
javascript里的条件判断
2007/02/27 Javascript
JavaScript的eval JSON object问题
2009/11/15 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
javascript编写简易计算器
2017/05/06 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
python和php哪个容易学
2020/06/19 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
男性健康日的活动方案
2014/08/18 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
工会文体活动总结
2015/05/07 职场文书
四年级数学教学反思
2016/02/16 职场文书
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技