Django静态文件配置与中间件IP禁用及异常处理实战
本文详解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程序设计有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









