目录
Django MIDDLEWARE 三步走 process_request process_view process_response
Django STATIC_URL STATIC_ROOT STATICFILES_DIRS
Django TIME_ZONE USE_TZ
Django DEBUG
Django MIDDLEWARE 三步走 process_request process_view process_response
在Django的中间件处理流程中,process_request
、process_view
和 process_response
的执行顺序如下:
-
当一个请求到达Django应用时,首先会调用所有中间件的
process_request
方法,按照中间件的定义顺序从上到下执行。 -
如果所有中间件的
process_request
方法都执行完毕且没有返回响应,请求会进入路由系统,匹配对应的视图函数。在调用视图函数之前,Django会按照中间件的定义顺序从上到下执行所有中间件的process_view
方法。 -
视图函数处理请求,并返回一个响应对象(HttpResponse)。
-
响应对象会再次经过中间件的处理链,这时会按照中间件的定义顺序从下到上执行所有中间件的
process_response
方法。
总的来说,执行顺序是:
process_request(从上到下)-> process_view(从上到下)-> 视图函数 -> process_response(从下到上)。
需注意,如果某个中间件的 process_request
或 process_view
方法返回了响应对象,那么请求将不会继续传递,而是直接进入 process_response
阶段。
Django STATIC_URL STATIC_ROOT STATICFILES_DIRS
三个是专门用于配置静态文件处理的设置。
STATIC_URL
用于配置静态文件的URL前缀;STATIC_ROOT
用于配置静态文件的收集目录;STATICFILES_DIRS
用于配置额外的静态文件目录。
STATIC_URL = '/static/'
那么在模板中使用 `{% static 'css/style.css' %}` 时,渲染出来的链接为 `/static/css/style.css`。
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
运行 `python manage.py collectstatic` 命令时,Django会将所有应用中的静态文件(以及 `STATICFILES_DIRS` 中指定的目录)复制到这个目录。在生产环境中,通常会配置Web服务器(如Nginx)直接从这个目录提供静态文件。
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'extra_static'),
]
除了应用中的 static
文件夹,还可以在这里添加其他包含额外的静态文件的目录。
Django TIME_ZONE USE_TZ
TIME_ZONE
:这个设置用于指定Django应用的默认时区(默认值'UTC')。
:这个设置用于指定是否启用时区支持(默认值True)。
USE_TZ
为什么开发会注意他们呢,在非国际化项目中,也会为什么?因为会影响ORM操作与admin,经常能在大部分Django项目的settings里见到:
TIME_ZONE = 'Asia/Shanghai' # 时区设置为中国上海(东八区)
如果设置USE_TZ=False
,Django将使用本地时间(由 TIME_ZONE
指定)而不是UTC时间,若不设置TIME_ZONE则用OS的本地时间,进行ORM操作时,Django不会对时间进行任何转换。但如果需特定情况下用其他时区,用 Django 提供的时区相关函数(如
timezone.localtime()
timezone.make_aware()
)转换,就会使用TIME_ZONE。
如果USE_TZ=True,Django会将所有日期和时间相关的字段(如 DateTimeField
和 DateField
)存储为UTC时间。在进行ORM操作时,Django会自动将UTC时间转换为 TIME_ZONE
指定的时区。在模板和表单、admin中,也会自动进行时区转换。
Django DEBUG
DEBUG
是一个配置选项,用于指示Django应用是否运行在调试模式。
(1)当发生错误时,Django会显示一个详细的错误页面,包括错误信息、堆栈跟踪、本地变量等。这有助于开发人员快速定位和解决问题:
(2)调试模式下,Django会自动处理静态文件的访问,而无需额外配置Web服务器;
(3)性能优化关闭:为提高开发过程中的调试效率,Django关闭某些性能优化选项,如模板缓存
等等便于本地开发调测的功能。
注意,在生产环境中,您应该将DEBUG
设置为False
,以确保应用程序的安全性和性能。
为什么呢?
(1)详细的错误页面可能会泄露应用程序的内部实现细节,使攻击者更容易发现潜在安全漏洞。
(2)详细的错误页面可能会泄露敏感数据,例如数据库密码、API 密钥等。
(3)Django 关闭了一些性能优化选项,影响正常性能。
(4)调试模式下,Django 会自动处理静态文件的访问。然而,在生产环境中,静态文件应由专门的 Web 服务器(如 Nginx)处理,以提高性能和安全性。