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调用短信猫控件实现发短信功能实例
Jul 04 Python
Python 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
基于python生成器封装的协程类
Mar 20 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
Python实现图片识别加翻译功能
Dec 26 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
python变量的作用域是什么
May 26 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python 创建守护进程的示例
Sep 29 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
python subprocess pipe 实时输出日志的操作
Dec 05 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
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
详解webpack-dev-server的简单使用
2018/04/02 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
在Python的Django框架中编写错误提示页面
2015/07/22 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python向图片里添加文字
2019/11/26 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
RealTek面试题
2016/06/28 面试题
先进个人事迹材料
2014/01/25 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
学校文明单位申报材料
2014/05/06 职场文书
医学求职自荐信
2014/06/21 职场文书