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代码做configure文件
Jul 20 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
python排序方法实例分析
Apr 30 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
Puppeteer使用示例详解
Jun 20 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
提升python处理速度原理及方法实例
Dec 25 Python
Pandas数据分析的一些常用小技巧
Feb 07 Python
python树莓派通过队列实现进程交互的程序分析
Jul 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
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
php获取远程文件大小
2015/10/20 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
JS 统计时间
2021/03/09 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
python删除过期文件的方法
2015/05/29 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
如何使用Python 打印各种三角形
2019/06/28 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python实现搜索算法的实例代码
2020/01/02 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
领导干部对照检查材料
2014/08/24 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
Python爬虫基础初探selenium
2021/05/31 Python