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开发编码规范
Sep 08 Python
python实现rest请求api示例
Apr 22 Python
Python查看多台服务器进程的脚本分享
Jun 11 Python
python有证书的加密解密实现方法
Nov 19 Python
Python守护进程用法实例分析
Jun 04 Python
python将ansible配置转为json格式实例代码
May 15 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python自动化生成IOS的图标
Nov 13 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
使用python绘制二维图形示例
Nov 22 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 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运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python+opencv实现霍夫变换检测直线
2020/10/23 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python中的列表与元组的使用
2019/08/08 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
python中pickle模块浅析
2020/12/29 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
早餐连锁店计划书
2014/01/08 职场文书
装修五一活动策划案
2014/01/23 职场文书
公司新年寄语
2014/04/04 职场文书
工作鉴定评语
2014/05/04 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
查摆剖析材料范文
2014/09/30 职场文书
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
python图像处理 PIL Image操作实例
2022/04/09 Python