Django静态文件配置与中间件IP禁用及异常处理实战

小岛来信
小岛来信
发布时间:2026-10-13 | 5人浏览过
原创

本文详解Django框架中静态文件的配置与动态引用方法,深入解析中间件的六个生命周期钩子。通过实例演示如何在process_view中实现指定IP禁用功能,并利用process_exception处理视图函数异常,返回自定义错误响应,帮助开发者掌握Django请求处理的核心机制。

本文通过具体实例,详细讲解Django框架中静态文件的使用、中间件的配置以及基于中间件实现IP禁用功能的方法,供读者参考学习。

静态文件

Django静态文件配置与引用

一、静态文件的使用

静态文件通常指网页中引用的CSS样式表、JavaScript脚本以及图片资源。

静态文件的使用流程如下:

首先在项目根目录下创建用于存放静态资源的目录(例如命名为static),并将HTML、CSS、JS等静态文件导入该目录。

接着,在项目的settings.py配置文件中进行静态目录的相关配置。


# 通过此url来引用静态文件,可以隐藏服务器的文件的实际保存目录
STATIC_URL = '/abc/'
# 指定静态文件所在的物理目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

通过settings.py中配置的STATIC_URL值来引用静态文件,这种做法的优势在于可以隐藏服务器文件实际的物理保存路径,提高安全性。例如:


<img src="/abc/image/mm.jpg" />
<script src="/abc/js/jquery-1.12.4.min.js"></script>

二、使用static标签动态引用

上述通过硬编码方式引用静态文件存在维护困难的问题,推荐使用Django提供的static标签进行动态引用,以提高代码的可维护性。


<!DOCTYPE html>
<html lang="en">
{% load staticfiles %}
<head>
...
</head>
<body>
动态引用:<br/>
<img src="{% static 'image/mm.jpg' %}"/>
</body>
</html>

Django中间件机制与IP禁用实现

中间件

MIDDLEWARE配置项用于定义Django项目中启用的中间件列表。

一、案例:禁止指定IP地址的访问

可以通过request对象的META属性获取访问用户的IP地址,具体方法如下:


request.META.get('REMOTE_ADDR')

二、中间件机制

中间件是Django框架预留的接口,用于控制请求和响应的处理过程。Django预置了6个中间件方法,它们在不同阶段执行,从而对输入或输出进行干预。

初始化方法:无需任何参数,当服务器响应第一个请求时调用一次。


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

仅当视图函数返回TemplateResponse时才会调用此方法,若返回HttpResponse对象则不会调用。

视图函数处理后、返回内容给浏览器前调用:该方法需返回HttpResponse对象。


def process_response(self, request, response):
  return response

禁用IP功能

在自定义中间类MyMiddleware的process_view方法中,新增以下代码以实现IP禁用逻辑:


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('禁止访问')

利用中间件处理视图异常

异常处理

当视图函数执行出错时,Django会调用中间件的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 相关产品和应用

全部下载

专题列表