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 19 Python
Django学习教程之静态文件的调用详解
May 08 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
Python-Flask:动态创建表的示例详解
Nov 22 Python
python 多进程队列数据处理详解
Dec 23 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Python如何安装第三方模块
May 28 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
python输入中文的实例方法
Sep 14 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 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 ADODB使用方法集锦
2008/03/25 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
Python实现从url中提取域名的几种方法
2014/09/26 Python
python计算文本文件行数的方法
2015/07/06 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
社会实践先进工作者事迹材料
2014/05/06 职场文书
环境保护建议书
2014/08/26 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
2015年新教师工作总结
2015/04/28 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技