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批量按比例缩小图片脚本分享
May 21 Python
python 异或加密字符串的实例
Oct 14 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
Python实现的特征提取操作示例
Dec 03 Python
selenium处理元素定位点击无效问题
Jun 12 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
Python中函数的返回值示例浅析
Aug 28 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
python实现无边框进度条的实例代码
Dec 30 Python
如何用python开发Zeroc Ice应用
Jan 29 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 OPCode缓存 APC详细介绍
2010/10/12 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
javascript时间函数大全
2014/06/30 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
JS监听事件的叠加和移除功能
2018/11/19 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
vue项目实现多语言切换的思路
2020/09/17 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
对python生成业务报表的实例详解
2019/02/03 Python
详解python中list的使用
2019/03/15 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
部队学习十八大感言
2014/01/11 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android