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处理python编码问题
Mar 13 Python
详解python调度框架APScheduler使用
Mar 28 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python操作excel的方法
Aug 16 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
使用python3构建文件传输的方法
Feb 13 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
python中的协程深入理解
Jun 10 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
python如何将两个txt文件内容合并
Oct 18 Python
python离线安装外部依赖包的实现
Feb 13 Python
基于python 取余问题(%)详解
Jun 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php商品对比功能代码分享
2015/09/24 PHP
JavaScript修改css样式style
2008/04/15 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
对比分析json及XML
2014/11/28 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Pytorch to(device)用法
2020/01/08 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
行政部总经理岗位职责
2014/01/04 职场文书
婚礼主持词
2014/03/13 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
个人简历自荐信
2014/06/26 职场文书
收入证明怎么写
2015/06/12 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
聊聊redis-dump工具安装问题
2022/01/18 Redis
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS