【django】2-1 (django配置) 应用配置、中间件配置、模板配置


创建django项目后,会自动生成初始的项目文件如下:

manage.py           # 管理django项目的命令行工具
django_pro/         # 项目的python包
    __init__.py		# 表示当前文件夹是一个python包
	settings.py     # 项目的配置文件
	urls.py         # 项目的URL声明
	asgi.py         # 项目运行在兼容ASGI的web服务器上的入口
	wsgi.py         # 项目运行在兼容WSGI的web服务器上的入口

settings.py文件包含了项目的基础配置。

settings.py可选的全部配置见文档:django配置


1 基本设置

  • BASE_DIR 项目所在的目录

    BASE_DIR = Path(__file__).resolve().parent.parent
    
  • SECRET_KEY 用于提供加密签名的密钥,需要保密。
    django项目在创建时会自动创建一个随机生成的密钥。
    它会被用于会话、消息、密码的加密。

  • DEBUG 调试模式开关
    调试模式下会显示详细的错误页面。
    生产环境下需要关闭调试模式。

  • ALLOWED_HOSTS 允许访问的主机名列表
    在生产环境中需要指定,用来防止HTTP攻击。

    # 默认值
    ALLOWED_HOSTS = []
    
    # 示例
    ALLOWED_HOSTS = ['www.example.com']
    
  • ROOT_URLCONF 项目的主URL配置文件路径


2 应用配置

INSTALLED_APPS中包括django安装中所有被启用的自带应用和自定义应用。
其中的每一个字符串都是点分隔路径的格式,表示应用程序配置类或包含应用程序的包。
多个应用程序提供同一个资源的不同版本时,排在前面的应用程序先被使用。

2.1 django核心应用

INSTALLED_APPS的初始值包含6个应用:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

这6项是django的核心应用,它们的作用如下:

  • django.contrib.admin,提供django管理后台,可以在Web页面管理数据库。
  • django.contrib.auth,用户认证系统,包括用户、组、权限管理和登录、注销、密码重置登功能。
  • django.contrib.contenttypes,提供内容类型框架。
  • django.contrib.sessions,会话管理,支持跨请求的用户会话存储,用于存储用户状态。
  • django.contrib.messages,提供消息框架,用于在请求之间传递一次性消息。
  • django.contrib.staticfiles,在开发和生产环境中收集和提供静态文件。

django还提供了其他的可选应用:

  • django.contrib.sites,多站点管理,允许一个django项目管理多个站点。
  • django.contrib.flatpages,创建和管理不需要复杂逻辑的静态页面。
  • django.contrib.redirects,管理URL重定向规则。
  • django.contrib.humanize,用于将数据转为更易读的形式。
  • django.contrib.postgres,提供PostgreSQL数据库的功能支持,如全文搜索、数组字段、JSON字段等。

2.2 常用第三方应用

为了扩展django功能,常用的第三方应用如下:

  • rest_framework,快速构建RESTful API。
  • corsheaders,CORS中间件,处理跨域资源共享问题。
  • allauth,完整的用户认证和社交登录功能。
  • django_filters,过滤查询集。
  • debug_toolbar,在开发环境中提供调试信息。

3 中间件

MIDDLEWARE中是处理请求和响应的中间件列表。

中间件可以在请求到达视图之前或响应返回客户端之前执行一些操作。

3.1 默认使用的中间件

  • django.middleware.security.SecurityMiddleware
    提供安全相关的功能。设置HTTP安全头,支持HTTPS重定向等。

  • django.contrib.sessions.middleware.SessionMiddleware
    为每个请求启用会话支持,把会话数据存储在数据库、缓存或文件中。

  • django.middleware.common.CommonMiddleware
    提供一些通用的功能。如URL规范化、禁止访问DISALLOWED_USER_AGENTS中的用户代理、支持APPEND_SLASH配置。

  • django.middleware.csrf.CsrfViewMiddleware
    为POST请求验证CSRF Token,防止伪造的用户请求。

    CSRF,跨站请求伪造。

  • django.contrib.auth.middleware.AuthenticationMiddleware
    将认证用户附加到请求对象上:request.user。支持用户登录、注销和权限检查。

  • django.contrib.messages.middleware.MessageMiddleware
    在请求之间传递一次性消息,如成功提示、错误提示。消息可以存在会话、Cookie或其他后端中。

  • django.middleware.clickjacking.XFrameOptionsMiddleware
    防止点击劫持攻击。设置X-Frame-Options头,限制页面是否可以在<frame><iframe>、或<object>标签中加载。

3.2 其它内置中间件

  • django.middleware.locale.LocaleMiddleware
    国际化支持。根据用户的语言偏好设置语言,支持通过URL、会话或浏览器设置语言。
  • django.middleware.gzip.GZipMiddleware
    允许使用gzip压缩响应内容,减少传输数据量。
  • django.middleware.cache.FetchFromCacheMiddleware
    缓存支持,在响应阶段缓存页面。
  • django.middleware.cache.UpdateCacheMiddleware
    缓存支持,在请求阶段从缓存中获取页面。

3.3 第三方中间件

  • corsheaders.middleware.CorsMiddleware
    允许浏览器跨域访问资源。
  • debug_toolbar.middleware.DebugToolbarMiddleware
    在开发环境中显示调试信息。
  • whitenoise.middleware.WhiteNoiseMiddleware
    静态文件管理。

3.4 中间件的执行顺序

中间件的执行顺序和它在MIDDLEWARE列表中的顺序有关。

  • 请求阶段
    在请求阶段,django会按MIDDLEWARE列表从上到下依次调用每个中间件的process_request方法。
    如果某个中间件的process_request返回None,请求会继续传给下一个中间件。
    如果某个中间件的process_request返回JttpResponse对象,就跳过后续中间件,进入响应阶段。

  • 异常处理阶段
    如果在请求处理过程中发生异常,django会按MIDDLEWARE列表从下到上依次调用每个中间件的process_exception方法。
    如果某个中间件的process_exception方法返回HttpResponse对象,就跳过后续中间件,直接进入响应阶段。

  • 视图处理阶段
    在请求阶段,如果所有中间件的process_request方法都返回None,请求会交给视图进行处理。
    视图函数或视图类处理完成后,进入响应阶段。

  • 响应阶段
    在响应阶段,django会按MIDDLEWARE列表从下到上依次调用每个中间件的process_response方法。
    每个中间件的process_response都会接收请求和响应对象,并可以修改响应的内容。


4 模板引擎配置

TEMPLATES用于配置django项目中的模板引擎。
TEMPLATES是一个列表,每个元素是一个字典,表示一个模板引擎的配置。
django支持多个模板引擎,但通常只需要配置一个。

默认的模板引擎:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

4.1 配置字典的键

  • BACKEND 指定模板引擎的后端类
    默认是django自带的模板引擎。
    安装jinja2后可以使用Jinja2模板引擎:'django.template.backends.jinja2.Jinja2'

  • DIRS 模板文件所在目录的绝对路径列表

    'DIRS': [BASE_DIR / 'templates'],
    
  • APP_DIRS 布尔值,是否在已安装应用的templates目录下查找模板

  • OPTIONS 模板引擎的额外配置项
    值为一个字典,包含以下配置项:

    • context_processors,上下文处理器列表,用于向模板传递全局变量;
    • libraries,注册自定义模板标签的过滤器;
    • builtins,注册内置模板标签和过滤器;
    • autoescape,是否自动转义HTML内容,默认True;
    • debug,是否启用模板调试模式,默认等于DEBUG设置的值;

4.2 上下文处理器

django自带的上下文处理器:

  • django.template.context_processors.debug
    在调试模式下,向模板传递debugsql_queries的值。
  • django.template.context_processors.request
    向模板传递request对象。
  • django.contrib.auth.context_processors.auth
    向模板传递userperms变量。
  • django.contrib.messages.context_processors.messages
    向模板传递messages变量。
<p>{{ debug }}</p>          <!-- 是否为调试模式 -->
<p>{{ request.user }}</p>   <!-- 获取当前用户 -->
<p>{{ user }}</p>           <!-- 获取当前用户 -->
<p>{{ perms }}</p>          <!-- 检查用户权限 -->
<p>{{ messages }}</p>       <!-- 显示一次性消息 -->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值