首页 > 编程问答 >Django 5.0:配置本地开发和生产环境?

Django 5.0:配置本地开发和生产环境?

时间:2024-07-24 05:13:03浏览次数:7  
标签:python django heroku render pythonanywhere

这个问题已经以各种形式被问过几次。 然而,关于这个主题的大多数答案都有十年或更久的历史了。 我的《Two Scoops》书是针对 Django 3.x 的。 我认为更新与 Django 5.0 相关的答案和今天可用的托管选项可能会很有用。

这是我回顾过的许多旧讨论之一:

Django:如何管理开发和生产设置?

我对以下场景特别感兴趣:

  • 使用 PyCharm 在 Windows 上进行本地开发
  • 从一开始就使用 PostgreSQL(而不是 SQLite)
  • 生产部署到 Heroku、Render 或 PythonAnywhere

我有我对本地环境的目录结构等方面的偏好。 Django 创建的名为“mypicturesite”的应用程序的标准布局是:

mypicturesite/
    code/
        mypicturesite/
            __init__.py
            settings.py
            urls.py
            wsgi.py
        <directories for other apps in the site>
        manage.py
        db.sqlite3
    venv/
            <various work directories>/

这样您最终会得到如下所示的路径:

z:/mypicturesite/code/mypicturesite

我的方法如下所示:

mypicturesite/
    code/                # The entire codebase, including virtual environment
        site/            # This now makes sense; this contains the site code
            __config/    # These are the site configuration scripts
                __init__.py
                settings.py
                urls.py
                wsgi.py
            <directories for other apps in the site>
            manage.py
            db.sqlite3
        venv/
    <various work directories>/

结果:

z:/mypicturesite/code/site

I过去一直强烈批评著名的 Django 5 分钟安装缺乏可用性(从许多角度来看)。 这就是为什么有数十个(如果不是数百个)多页文章和视频解释如何部署 Django,甚至还有一些非常有趣的模因。

自 3.x 以来我就没有接触过 Django。 这就是我发布这个问题的原因。 今天推荐的设置是什么?


以下是针对 Django 5.0 进行本地开发和生产设置的更新指南,重点关注的要求:

本地开发(Windows 上使用 PyCharm)

  1. 虚拟环境: 坚持使用虚拟环境!PyCharm 与它们无缝集成。
  2. 在 PyCharm 的项目中打开终端。
  3. 创建虚拟环境: python -m venv .venv (Python 3.3+)。
  4. 在 PyCharm 中,转到 File > Settings > Project: [your-project] > Python Interpreter ,并将解释器设置为虚拟环境中的 Python 可执行文件(例如, .venv\Scripts\python.exe )。

  5. PostgreSQL 从一开始:

  6. 安装: https://www.postgresql.org/download/ 下载并安装 PostgreSQL。请务必记下安装过程中的用户名和密码。
  7. psycopg3: 安装 PostgreSQL 适配器: pip install psycopg3

  8. Django 项目设置:

  9. 在 PyCharm 的终端中: django-admin startproject mypicturesite . (注意结尾的点,用于在当前目录中创建项目)。
  10. 的项目结构: 的方法完全有效,并且比默认方法更有条理。坚持下去!这有助于将的代码与项目级配置分开。

  11. settings.py 配置:

```python from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path( file ).resolve().parent.parent

# ... other settings ...

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mypicturesitedb', # 的数据库名称 'USER': 'your_db_user', # 的 PostgreSQL 用户名 'PASSWORD': 'your_db_password', 'HOST': 'localhost', 'PORT': '5432', } } ```

  1. 迁移和运行服务器:
  2. python manage.py migrate
  3. python manage.py runserver

生产部署(Heroku、Render、PythonAnywhere)

共同步骤

  1. requirements.txt: pip freeze > requirements.txt (添加 gunicorn 以进行生产 Web 服务器)。

  2. 设置 Git 存储库: 如果还没有,请初始化一个 Git 存储库并将的代码推送到像 GitHub、GitLab 或 Bitbucket 这样的平台。

  3. 生产设置:

  4. 单独的设置文件: 考虑为生产创建一个单独的设置文件(例如, settings_prod.py ),或使用环境变量来管理敏感数据。

  5. DEBUG = False: 在生产中将其设置为 False
  6. ALLOWED_HOSTS: 将的生产域/主机名添加到此列表中。
  7. 静态文件: 在生产中,需要设置 STATIC_ROOT 并配置像 Whitenoise 这样的东西来提供静态文件,或者使用云提供商的对象存储。

  8. 数据库设置: 在生产中,需要使用云数据库服务(Heroku Postgres、Amazon RDS 等)或在自己的服务器上设置数据库。

Heroku 特定

  1. Heroku CLI: https://devcenter.heroku.com/articles/heroku-cli 安装 Heroku CLI。

  2. 登录和创建应用:

  3. heroku login
  4. heroku create mypicturesite-app

  5. 设置数据库:

  6. heroku addons:create heroku-postgresql:hobby-dev

  7. 部署:

  8. git push heroku main

Render 特定

  1. GitHub/GitLab 集成: Render 与 GitHub 和 GitLab 无缝集成,便于部署。

  2. Render 仪表板: 创建一个新的 Render 服务,连接的存储库,并配置环境变量(数据库凭据、 SECRET_KEY 等)。

  3. 自动部署: Render 在每次推送代码时自动部署的应用程序。

PythonAnywhere 特定

  1. Web 应用程序设置: 在的 PythonAnywhere 仪表板中,创建一个新的 Web 应用程序并指定的 Python 版本。

  2. 代码上传/克隆: 将的代码上传到 PythonAnywhere 或从的 Git 存储库克隆它。

  3. 虚拟环境: 在 PythonAnywhere 上创建并激活虚拟环境。

  4. Web 应用程序配置: 在 PythonAnywhere 的“Web”选项卡中配置的 Web 应用程序,指定 WSGI 文件的位置等。

其他提示

  • Django 安全性: 阅读 Django 文档中关于安全性的部分,并始终采取预防措施来保护的应用程序,尤其是在生产环境中。
  • 性能: 使用 Django Debug Toolbar 等工具来识别和解决性能瓶颈。考虑在生产中使用缓存(Redis)和性能分析工具。
  • 持续集成和持续交付 (CI/CD): 探索使用 GitHub Actions、GitLab CI 或其他 CI/CD 工具来自动化的构建、测试和部署流程。

通过遵循这些步骤,可以为的 Django 5.0 项目设置一个强大且可扩展的开发和生产环境。请记住根据的特定需求和选择的云平台调整配置。

标签:python,django,heroku,render,pythonanywhere
From: 78785597

相关文章

  • 如何使用 Python 打开 Google Firestore 上的特定数据库?
    我正在使用Firebase并使用以下代码从Firestore设置/检索文档:importfirebase_adminfromfirebase_adminimportcredentials,firestorecred=credentials.ApplicationDefault()firebase_admin.initialize_app(cred,options={"projectId":"huq-jimbo"})fires......
  • 如何使用 Python 和 Numpy 重现 Matlab 文件读取以解码 .dat 文件?
    我有一个Matlab脚本,可以读取编码的.dat文件,对其进行解码并保存。我试图使用numpy将其转换为Python。我发现对于同一个文件,我得到不同的输出结果(python数字没有意义)。该代码最初作为从串行端口读取的脚本的一部分运行,因此是数据的结构。我首先认为位移是问题所在,因为......
  • 在Python中调整pdf页面大小
    我正在使用python裁剪pdf页面。一切正常,但如何更改页面大小(宽度)?这是我的裁剪代码:input=PdfFileReader(file('my.pdf','rb'))p=input.getPage(1)(w,h)=p.mediaBox.upperRightp.mediaBox.upperRight=(w/4,h)output.addPage(p)当我裁剪页面时,我也需要......
  • 如何使用 python 更改资源管理器窗口中的路径?
    没有人知道如何在不使用python打开新实例的情况下更改资源管理器窗口中的当前路径吗?例如,如果用户使用C:\Users\User打开资源管理器窗口。然后我必须将该路径更改为C:\Windows\System32例如。提前致谢。很遗憾,无法直接使用Python更改现有文件资源管理器窗口的......
  • django 和 celery 中解释 env 变量的差异
    我对带有反斜杠的环境变量有疑问。我有:NETWORK=\\TI\folder但是在Django和Celery中,这个变量将以不同的方式解释:Django:\\TI\folderCelery:\TIfolder为什么我有差异?Celery和Django具有相同的env文件和环境。Python3.8Django和Celery对环境变量......
  • python 以及将数组传递给函数的问题
    我需要求解一些常微分方程$\frac{dy}{dx}=f(x)=x^2ln(x)$并继续在限制0之间创建数组xpt。<=xpt<=2因为我必须小心xpt=0,所以我将函数定义如下deff(x):ifx<=1.e-6:return0.else:returnnp.square(x)*np.log(x)我的调用程序读取Np......
  • 如果 Python 脚本正在使用文件夹,如何在文件资源管理器中进行更改时防止 Windows 的“
    我有一个简单的脚本,显示在QTreeView中的QListView中选择的目录的内容,我想添加打开文件资源管理器的功能,以让用户编辑目录内的内容。但是,添加新的文件夹和文件可以,但删除或移动文件夹或文件会提示“文件夹正在使用”错误:此操作无法完成,因为该文件已在另一个程......
  • 如何使用 Python API 获取每个模型的活跃用户列表、最后登录信息
    我想通过PythonAPI获取我的dbt项目的所有模型中的活动或非活动用户列表。这可能吗?我尝试列出模型,但无法获取用户信息,如用户名、项目、以及上次活动或上次登录。不幸的是,dbt本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt的主要功能是转换数据,而不......
  • Python tkinter 窗口不断关闭,我不知道为什么
    我正在尝试制作一个有趣的小程序,其中每小时左右就会有一只毛茸茸的动物走过屏幕。我有一个主窗口,它启动一个循环,每小时左右播放一次动画/声音,但是在口袋妖怪第一次完成行走后,整个程序就会结束。我认为这可能与我设置tkinter窗口的方式有关,但我无法弄清楚。我认为在这里包含......
  • 用于自动访问 MongoDB Atlas CLI 的 Python 脚本
    我想编写一个Python脚本,以便普通用户可以访问他的数据库并从他的终端执行CRUD操作。我正在查看官方文档,但我有点迷失。有人可以给我指点基本教程来开始吗?当然,以下是如何构建Python脚本来访问MongoDBAtlasCLI的基本教程:先决条件:MongoDBAtlas......