Django框架静态文件使用/中间件/禁用ip功能实例详解


Posted in Python onJuly 22, 2019

本文实例讲述了Django框架静态文件使用/中间件/禁用ip功能。分享给大家供大家参考,具体如下:

静态文件

一、静态文件的使用

静态文件:网页中使用的css,js,图片

静态文件的使用:

在项目下创建静态目录,比如:static,导入静态文件(HTML、CSS、js)

在setting.py中配置静态目录

# 通过此url来引用静态文件,可以隐藏服务器的文件的实际保存目录
STATIC_URL = '/abc/'
# 指定静态文件所在的物理目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

通过setting.py中的STATIC_URL的值来引用静态文件,好处:可以隐藏服务器的文件的实际保存目录。比如:

<img src="/abc/image/mm.jpg" />
<script src="/abc/js/jquery-1.12.4.min.js"></script>

二、使用static标签动态引用

上述写法是硬编码,存在维护问题,可以使用static标签动态引用

<!DOCTYPE html>
<html lang="en">
{% load staticfiles %}
<head>
...
</head>
<body>
动态引用:<br/>
<img src="{% static 'image/mm.jpg' %}"/>
</body>
</html>

中间件

MIDDLEWARE: 中间件

一、案例: 禁止指定ip地址的访问

使用request对象的META属性,可以获取用户访问的ip地址:

request.META.get('REMOTE_ADDR')

二、中间件

中间件: django框架预留的接口,可以控制请求和响应的过程。Django在中间件中预置了6个方法,这些方法会在不同的阶段执行,对输入或输出进行干预。

Django框架静态文件使用/中间件/禁用ip功能实例详解

初始化:无需任何参数,服务器响应第一个请求的时候调用一次:

def __init__():
  pass

处理请求前(url匹配前)调用: 返回None或HttpResponse对象

def process_request(self, request):
  pass

url匹配后视图函数处理前调用: 返回None或HttpResponse对象

def process_view(self, request, view_func, view_args, view_kwargs):
  pass

视图函数出异常时调用:返回一个HttpResponse对象

def process_exception(self, request, exception):
  return response

视图函数处理后,模板响应处理前调用: 返回实现了render方法的响应对象

def process_template_response(self, request, response):
  pass

视图函数返回TemplateReponse时才会调用,返回HttpResponse对象不会调用

视图函数处理后,返回内容给浏览器前调用:返回HttpResponse对象

def process_response(self, request, response):
  return response

禁用ip功能

在MyMiddleware的process_view方法中,新增代码如下:

class MyMiddleware(object):
  ...
  exclude_ips = ['127.0.0.1']
  def process_view(self, request, view_func, view_args, view_kwargs):
    print('--process_view--')
    # 禁用ip,以下代码也可以添加到process_request方法
    ip = request.META.get('REMOTE_ADDR')
    if ip in exclude_ips:
return HttpResponse('禁止访问')

异常处理

异常处理: 视图函数执行出错之后,会调用中间件的process_exception方法,可以在该方法中执行异常操作。

在index视图函数中,添加执行出错代码:

def index(request):
  """进入首页"""
  print('=====index====')
  # 添加出错代码
  aa = None
  print('aa='+ aa)
  return render(request, 'app01/index.html')

在前面编写的MyMiddleware中: 添加处理异常的中间件方法,并注释前面的拦截ip的拦截:

# middleware.py
class MyMiddleware(object):
  ...
  def process_view(self, request, view_func, view_args, view_kwargs):
    print('-------process_view')
    # # 禁止ip访问
    # ip = request.META.get('REMOTE_ADDR')
    # if ip in exclude_ips:
    #   return HttpResponse('禁止访问')
  def process_exception(self, request, exception):
    print('-----process_exception')

访问首页,查看服务器,发现:处理异常的中间件方法process_exception执行了

处理出错: 在process_exception方法中返回HttpResponse对象就可以了:

# middleware.py
class MyMiddleware(object):
  ...
  def process_exception(self, request, exception):
    print('-----process_exception')
    return HttpResponse('运行出错了:%s' % exception)

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
pycharm 的Structure界面设置操作
Feb 05 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 Python
python多进程下实现日志记录按时间分割
Jul 22 #Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 #Python
python实现日志按天分割
Jul 22 #Python
python re.sub()替换正则的匹配内容方法
Jul 22 #Python
简单了解python gevent 协程使用及作用
Jul 22 #Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 #Python
python+logging+yaml实现日志分割
Jul 22 #Python
You might like
thinkphp浏览历史功能实现方法
2014/10/29 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
基于Python实现文件大小输出
2016/01/11 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python中的引用知识点总结
2019/05/20 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
python自动点赞功能的实现思路
2020/02/26 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
final, finally, finalize的区别
2012/03/01 面试题
物流管理应届生求职信
2013/11/07 职场文书
会计专业自荐信范文
2013/12/02 职场文书
煤矿班组长的职责
2013/12/25 职场文书
快递员岗位职责
2014/09/12 职场文书
政风行风评议整改方案
2014/09/15 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技