准备应用程序以进行部署

已完成

通过更新一些最常见的设置,设置应用程序以进行生产。

添加库

你将为你的项目使用两个新库:

  • whitenoise,用于处理静态文件
  • psycopg2-binary,用于连接生产数据库 PostgreSQL

在项目中安装这些库:

  1. 在 Visual Studio Code 中,打开 requirements.txt。

  2. 将以下代码添加到“requirements.txt”末尾。

    whitenoise
    psycopg2-binary
    
  3. 选择“终端”>“新建终端”,打开新的终端窗格。

  4. 通过运行以下命令安装库。

    pip install -r requirements.txt
    

创建生产设置文件

分配给两个核心设置 ALLOWED_HOSTSDATABASES 的值取决于托管应用程序的环境。 默认设置是为开发而设计的。 若要在生产环境中运行应用,请确保正确更新这些设置。

ALLOWED_HOSTS 控制允许托管或运行应用程序的服务器。 你将对其进行配置,以允许站点在 Azure 和本地运行。 DATABASES 包含可用连接字符串的列表。

配置这些设置的常见方法是创建另一个包含生产设置集合的 Python 文件。 然后,在 settings.py 末尾检查以确定是否要使用生产设置。

现在将创建一个生产设置文件并添加检查以确定应用程序是否在生产环境中运行:

  1. 在项目中创建一个新文件。 将其命名为 azure.py。

  2. 添加以下代码以导入 os

    from .settings import *
    import os
    
  3. 将以下代码添加到文件末尾,替代 ALLOWED_HOSTS,以允许 Azure 托管应用程序和定义受信任的原点。

    ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    CSRF_TRUSTED_ORIGINS = ['https://'+ os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    

    备注

    Azure 应用服务自动创建一个名为 WEBSITE_HOSTNAME 的环境变量。 此变量包含你的网站的 URL。 可以使用此变量来确定应用程序是否正在 Azure 上运行。

  4. 添加以下代码,为 PostgreSQL 配置数据库连接字符串。

    hostname = os.environ['DBHOST']
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': os.environ['DBNAME'],
            'HOST': hostname + ".postgres.database.azure.com",
            'USER': os.environ['DBUSER'],
            'PASSWORD': os.environ['DBPASS'] 
        }
    }
    

    备注

    稍后将在 Azure 中设置环境变量。

    备注

    数据库连接适用于 PostgreSQL 灵活服务器。 对于 PostgreSQL 单一服务器,请将 USER 值设置为 os.environ['DBUSER'] + "@" + hostname

    你正在使用的连接字符串适用于 PostgreSQL。 需要提供以下信息:

    • ENGINE:数据库类型
    • NAME:数据库名称
    • HOST:服务器 URL
    • USER:用于连接到数据库的用户名
    • PASSWORD:用户密码
  5. 将以下代码添加到文件的底部以启用 whitenoise,它将处理静态文件。

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        # Enables whitenoise for serving static files
        'whitenoise.middleware.WhiteNoiseMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    WhiteNoise 是用于读取对静态文件(如 CSS 或 JavaScript)的用户请求的中间件。 它还可以确保正确地处理文件。 你通过更新 MIDDLEWARE 数组注册了中间件。 你注册了一个 STATIC_ROOT 来存储静态文件。

  6. 通过添加以下代码,将 SECRET_KEY 设置为从环境变量读取。

    SECRET_KEY = os.getenv('SECRET_KEY')
    

    部署应用程序后,你将创建新的密钥,并将其存储为应用程序设置。

  7. 通过添加以下代码禁用调试模式。

    DEBUG = False
    

将应用配置为使用生产设置文件

现在,你已创建了生产设置文件,你可以更新应用程序以在生产环境中加载该文件。 首先查找 WEBSITE_HOSTNAME 环境变量。 此变量指示应用程序正在 Azure 上运行。

  1. 打开 settings.py。

  2. 将以下代码添加到文件末尾,以便在生产环境中运行应用时替代必需的设置。

    import os
    if 'WEBSITE_HOSTNAME' in os.environ: # Running on Azure
        from .azure import *
    
  3. 选择“文件”>“全部保存”,以保存所有文件。

你现在已配置用于生产的 Django 应用程序。