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 Socket网络编程
Jan 05 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
django中的数据库迁移的实现
Mar 16 Python
python中Django文件上传方法详解
Aug 05 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
python Xpath语法的使用
Nov 26 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 Python
python中子类与父类的关系基础知识点
Feb 02 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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
短波收音机简介
2021/03/01 无线电
提问的智慧(2)
2006/10/09 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
jquery中获取元素的几种方式小结
2011/07/05 Javascript
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
python pandas 对时间序列文件处理的实例
2018/06/22 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
高一英语教学反思
2014/01/22 职场文书
致百米运动员广播稿
2014/01/29 职场文书
精彩广告词大全
2014/03/19 职场文书
春节联欢会主持词
2014/03/24 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
公司财务管理制度
2015/08/04 职场文书
初中思想品德教学反思
2016/02/24 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
python数字图像处理实现图像的形变与缩放
2022/06/28 Python