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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
教你用Python写安卓游戏外挂
Jan 11 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
Python实现图片拼接的代码
Jul 02 Python
Python中extend和append的区别讲解
Jan 24 Python
Django  ORM 练习题及答案
Jul 19 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
python实现批量命名照片
Jun 18 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 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面向对象——访问修饰符介绍
2012/11/08 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
php实现的通用图片处理类
2015/03/24 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
理解javascript对象继承
2016/04/17 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
一套软件测试笔试题
2014/07/25 面试题
2014年大学班级工作总结
2014/11/14 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android