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 03 Python
Python编写电话薄实现增删改查功能
May 07 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
python提取照片坐标信息的实例代码
Aug 14 Python
python创建学生成绩管理系统
Nov 22 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
Python实现图片识别加翻译功能
Dec 26 Python
详细分析Python collections工具库
Jul 16 Python
Python基于内置函数type创建新类型
Oct 22 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
javascript 二分法(数组array)
2010/04/24 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
Python socket模块方法实现详解
2019/11/05 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
财务主管自我鉴定
2014/01/17 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
社区母亲节活动方案
2014/03/05 职场文书
协议书怎么写
2014/04/21 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
茶花女读书笔记
2015/06/29 职场文书
《失物招领》教学反思
2016/02/20 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL