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 paramiko实现ssh远程访问的方法
Dec 03 Python
python list使用示例 list中找连续的数字
Jan 27 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
django 解决manage.py migrate无效的问题
May 27 Python
详解用Python实现自动化监控远程服务器
May 18 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
python实现点击按钮修改数据的方法
Jul 17 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
python之生成多层json结构的实现
Feb 27 Python
Python实现CAN报文转换工具教程
May 05 Python
Python使用protobuf序列化和反序列化的实现
May 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 开发工具
2006/12/06 PHP
curl和libcurl的区别简介
2015/07/01 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
Javascript缓存API
2016/06/14 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
js实现星星海特效的示例
2020/09/28 Javascript
Python中实现三目运算的方法
2015/06/21 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
pandas分组聚合详解
2020/04/10 Python
python的数学算法函数及公式用法
2020/11/18 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
十八届三中全会报告学习材料
2014/02/17 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
经营目标管理责任书
2014/07/25 职场文书
普通党员对照检查材料
2014/09/24 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
预备党员个人总结
2015/02/14 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android