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编写脚本获取手机当前应用apk的信息
Jul 21 Python
用Python实现QQ游戏大家来找茬辅助工具
Sep 14 Python
开源Web应用框架Django图文教程
Mar 09 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Python入门学习指南分享
Apr 11 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
python抓取京东小米8手机配置信息
Nov 13 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python 子类调用父类的构造函数实例
Mar 12 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
解决jupyter notebook启动后没有token的坑
Apr 24 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
laravel清除视图缓存的代码
2019/10/23 PHP
js局部刷新页面时间具体实现
2013/07/04 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python批量提交沙箱问题实例
2014/10/08 Python
Python解惑之True和False详解
2017/04/24 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python函数与方法的区别总结
2019/06/23 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
国际贸易专业自荐信
2014/06/10 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
教师工作证明范本
2015/06/12 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
Rust中的Struct使用示例详解
2022/08/14 Javascript