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 命令行也可以自动补全
Nov 30 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
python数据结构之链表详解
Sep 12 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
Python 读写文件的操作代码
Sep 20 Python
python实现爬山算法的思路详解
Apr 09 Python
python实现按行分割文件
Jul 22 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
用python对excel进行操作(读,写,修改)
Dec 25 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实现将标点符号正则替换为空格的方法
2017/08/09 PHP
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
护士辞职信模板
2014/01/20 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
yy生日主持词
2014/03/20 职场文书
团委竞选演讲稿
2014/04/24 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
python 多态 协议 鸭子类型详解
2021/11/27 Python
python中mongodb包操作数据库
2022/04/19 Python