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 调用VC++的动态链接库(DLL)
Sep 06 Python
Python datetime时间格式化去掉前导0
Jul 31 Python
python根据出生日期返回年龄的方法
Mar 26 Python
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
Python 必须了解的5种高级特征
Sep 10 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 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/03 日漫
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
Javascript之文件操作
2007/03/07 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Python易忽视知识点小结
2015/05/25 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
英语道歉信范文
2014/01/09 职场文书
银行学习十八大感想
2014/01/11 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
工作收入住址证明
2014/10/28 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
搭建Yolov5服务器
2022/04/30 Servers