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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
Python 私有函数的实例详解
Sep 11 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python同步遍历多个列表的示例
Feb 19 Python
python实现局域网内实时通信代码
Dec 22 Python
Python Numpy库常见用法入门教程
Jan 16 Python
python如何实现复制目录到指定目录
Feb 13 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
python数字图像处理之图像的批量处理
Jun 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
解析isset与is_null的区别
2013/08/09 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
js闭包实例汇总
2014/11/09 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
Vue实现路由跳转和嵌套
2017/06/20 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
女大学生毕业找工作的自我评价
2013/10/03 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
爱心募捐通知范文
2015/04/27 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL