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创建系统目录的方法
Mar 11 Python
如何用itertools解决无序排列组合的问题
May 18 Python
wxPython之解决闪烁的问题
Jan 15 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
python使用turtle绘制国际象棋棋盘
May 23 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
Python列表如何更新值
May 27 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
Python字典实现伪切片功能
Oct 28 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python中xlutils库用法浅析
Dec 29 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
简单的页面缓冲技术
2006/10/09 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
php中JSON的使用方法
2015/04/30 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
js仿淘宝放大镜效果
2020/12/28 Javascript
Python将xml和xsl转换为html的方法
2015/03/10 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
Python实现读取json文件到excel表
2017/11/18 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
Python异常的检测和处理方法
2018/10/26 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
python通过cython加密代码
2020/12/11 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
先进个人推荐材料
2014/12/29 职场文书
2015年复活节活动总结
2015/02/27 职场文书
毕业设计工作总结
2015/08/14 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python