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实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
python每隔N秒运行指定函数的方法
Mar 16 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
如何通过python的fabric包完成代码上传部署
Jul 29 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
Python urlopen()参数代码示例解析
Dec 10 Python
Pandas加速代码之避免使用for循环
May 30 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
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
很实用的一个完整email发送程序
2006/10/09 PHP
PHP mail()函数使用及配置方法
2014/01/14 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python制作简单的网页爬虫
2015/11/22 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python 动态加载的实现方法
2017/12/22 Python
Python 元类实例解析
2018/04/04 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
2021/02/07 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
美发活动策划书
2014/01/14 职场文书
租房协议书范文
2014/08/20 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
市场营销计划书
2019/04/24 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android