Django 项目目录与常用命令
这节课我们来学习 Django 项目中的各个文件的作用,以及如何运行。
项目目录
项目创建完成并运行之后,我们就可以看到 Django 项目的默认目录,如下图:
内层的 my_site
文件夹是整个 Django 项目的根目录,通常它的名称是你项目的名称。在这个目录下,你会找到项目的配置文件、根 URL 映射等。Django 项目通常由多个应用程序组成,每个应用程序负责处理特定的功能。每个应用程序都是一个独立的模块,可以被其他项目复用。应用程序目录通常包含应用程序的模型、视图、模板和其他相关文件。
my_site/__init__.py
:空文件,作用是把该文件所在目录识别为 Python 的一个包,后期一些工具的初始化可能会用到。my_site/settings.py
:Django 项目的主要配置文件。它包含了项目的设置,例如数据库配置、应用程序列表、静态文件和媒体文件路径、国际化设置等。my_site/urls.py
:URL 映射文件,它定义了 URL 与视图函数的对应关系。在这里你可以配置项目的 URL 路由,将用户的请求映射到相应的视图函数。my_site/wsgi.py
:WSGI(Web Server Gateway Interface)入口,用于将项目部署到 WSGI 兼容的服务器上,例如 Apache 或 Nginx。my_site/asgi.py
:ASGI(Asynchronous Server Gateway Interface)入口,用于支持异步 Web 服务器和协议,例如在使用 Channels 处理 WebSockets 或长连接时使用。templates
:模板目录,用于存放 HTML 模板。db.sqlite3
: Django 项目中的默认数据库文件。在 Django 的 settings.py 文件中,通常会配置一个默认的数据库引擎(如 SQLite、MySQL、PostgreSQL 等),如果没有指定特定的数据库,Django 将使用 SQLite 作为默认数据库。db.sqlite3 文件包含了 Django 项目中所有模型的数据,每个模型对应数据库中的一个表。当你在项目中定义模型类并运行数据库迁移命令时,Django 将会根据模型类创建对应的数据库表结构,并将表的数据存储在 db.sqlite3 文件中。在开发阶段,使用 SQLite 是非常方便的,因为它不需要额外的服务器配置,数据库就是一个简单的文件。但在生产环境中,对于高负载和大规模的项目,通常会使用更为强大和稳定的数据库引擎,如 PostgreSQL 或 MySQL。manage.py
:命令行工具,它提供了很多实用的命令,例如运行开发服务器、创建数据库、应用数据库迁移等。通过在终端中运行 python manage.py,你可以查看可用的命令列表。
整体而言,Django 的项目目录结构非常规范和清晰,使得开发者能够轻松组织和管理项目的各个组件,并在项目开发过程中保持良好的可维护性。
什么是 SQLite?
嵌入式的小型数据库,应用在手机端。 零配置,SQlite3 不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复。
settings 文件
Django 的 settings.py
文件是 Django 项目的主要配置文件,它包含了项目的各种设置和选项。
以下是 settings.py
文件中常见的内容:
BASE_DIR
:用于表示 Django 项目的根目录路径。它通常用于构建其他路径的绝对路径,例如静态文件目录、模板目录、媒体文件目录等。这个变量的值是一个字符串,指向包含settings.py
文件的目录。__file__
表示当前文件也就是settings.py
,Path(__file__).resolve()
表示获取当前文件的路径,接着使用了两个parent
表示逐级向上获取父目录,最终得到项目的根目录路径。SECRET_KEY
:用于加密和验证 Django 项目中的一些敏感数据的密钥。这个密钥被用于生成会话令牌、加密密码等,保证了 Django 项目的安全性。DEBUG
:用于控制是否启用调试模式。在开发阶段,通常将其设置为 True,以便在出现错误时显示详细的错误信息。但在生产环境中,应将其设置为 False,以避免泄漏敏感信息。ALLOWED_HOSTS
:用于指定允许访问该项目的主机列表。必须明确列出允许的主机名或 IP 地址,以防止潜在的安全问题。只填写一个*
表示通配符,匹配所有的 IPINSTALLED_APPS
:这是一个包含所有已安装应用程序的列表。每个应用程序都是一个 Python 模块,它包含了项目的功能模块。在这里,你需要添加你的自定义应用程序和第三方应用程序,以便 Django 可以加载它们。MIDDLEWARE
:这是一个包含所有中间件的列表。中间件是 Django 处理请求和响应的钩子,可以在请求到达视图之前或响应返回给客户端之后执行预处理或后处理操作。DATABASES
:用于配置数据库连接的设置。你可以在这里设置数据库的类型(如 SQLite、MySQL、PostgreSQL等)、主机名、用户名、密码等信息。ROOT_URLCONF
:指定 Django 项目的 URL 路由配置文件的路径。URL 路由配置文件决定了用户请求的 URL 应该由哪个视图处理函数来处理。默认情况下,ROOT_URLCONF
被设置为项目的urls.py
文件,它位于项目根目录下。如果你有多个应用程序,可能会有不同的路由配置文件来组织 URL 映射。TEMPLATES
:这里配置了项目的模板引擎设置。你可以指定模板文件存放的目录,以及使用的模板引擎(如 Django 的内置模板引擎或其他第三方模板引擎)。STATIC_URL
和STATICFILES_DIRS
:STATIC_URL
指定了静态文件的 URL 前缀(如 /static/),而STATICFILES_DIRS
指定了项目中静态文件的存放目录。这些静态文件可以是 CSS、JavaScript、图像等。MEDIA_URL
和MEDIA_ROOT
:MEDIA_URL
指定了媒体文件(用户上传的文件)的 URL 前缀(如 /media/),而MEDIA_ROOT
指定了媒体文件在服务器上的存放目录。AUTH_PASSWORD_VALIDATORS
:用于指定用户认证的后端设置。默认情况下,Django 使用用户名/密码进行认证,但你可以根据需求添加其他认证后端,如邮箱认证、社交媒体认证等。WSGI_APPLICATION
:指定 Django 项目的 WSGI 应用程序的路径。对于大多数普通的 Django 项目,WSGI_APPLICATION
通常不需要设置,因为它默认指向项目的wsgi.py
文件,该文件位于项目根目录下。DEFAULT_AUTO_FIELD
:指定默认的自动生成主键字段的类型。Django 3.2 引入了新的行为,默认情况下,主键字段将使用 BigAutoField(64 位整数)来自动生成,而不是之前的 AutoField(32 位整数)。这个设置允许你在新的主键字段类型之间进行选择,如果你希望保持之前的行为,可以将其设置为 'django.db.models.AutoField'。
除了上述常见的内容,settings.py
文件还包含许多其他的设置和选项,用于配置数据库、国际化、时区、安全设置、缓存设置等。通过对 settings.py
文件进行适当的配置,你可以定制和优化 Django 项目的行为和功能。
manage.py
Django 的命令行工具:django-admin 与我们之前在创建项目的时候,已经使用过 django-admin
命令了。django admin
是 Django 用于管理任务的命令行实用程序。而 manage.py
会在每个 Django 项目中自动创建。它做的事情和 django-admin 一样,但也设置了 DJANGO_SETTINGS_MODULE 环境变量,使其指向你的项目的 settings.py 文件。
一般来说,当你在一个 Django 项目中工作时,使用 manage.py 比使用 django-admin 更容易。为了保持一致,我们在命令行中只是用 manage.py
,但是任何例子都可以使用 django-admin
。如果你的当前目录不是外层的 my_site
目录的话,请切换到此目录,然后运行下面的命令
使用方法如下:
django-admin <命令> [选项]
python manage.py <命令> [选项]
选项是非必填项,可以是 0 或更多用于指定命令的选项。
我们可以通过 python manage.py help
命令来显示使用信息和每个应用程序提供的命令列表。或者使用 python manage.py help <命令>
来显示命令的描述和可用选项的列表。
这里我们介绍几个 Django 常用的命令:
runserver
:在本地机器上启动一个轻量级的开发网络服务器。默认情况下,该服务器在 IP 地址127.0.0.1
的8000
端口上运行。当然,你可以明确地传递一个 IP 地址和端口号。
需要注意的是,不要在生产环境中使用本服务器。它没有经过安全审计或性能测试。开发服务器会根据需要为每个请求自动重新加载 Python 代码。你不需要重新启动服务器以使代码更改生效。然而,有些操作,如添加文件不会触发重启,所以在这些情况下你必须重启服务器。
提示
IP(Internet Protocol)是互联网协议的简称,它是一种用于在网络中传输数据的协议。IP 地址是一个唯一的标识符,用于识别网络中的每个设备。在互联网上,每个连接到网络的设备都有一个唯一的 IP 地址,它类似于一台电脑在网络上的“邮政地址”,用于确保数据能够正确地从一个设备传送到另一个设备。
端口号是用于在计算机上标识网络服务或应用程序的数字。在一个计算机上,可以同时运行多个网络服务或应用程序,每个服务或应用程序都使用一个唯一的端口号。端口号是一个 16 位的整数,范围从 0 到 65535。
我们可以这么写:
python manage.py runserver
python manage.py runserver 0.0.0.0:8080 # 自己指定 IP 与端口号,0.0.0.0 表示监听所有可用 IP
startapp
:在当前目录或给定的目标目录中为给定的应用名创建一个 Django 应用目录结构,包含默认的应用模板文件。如果只给出应用名称,应用目录将被创建在当前工作目录下。
例如,创建 app1 应用:
python manage.py app1
makemigrations
:根据检测到的模型变化创建新的迁移,示例:
python manage.py makemigrations
migrate
:将数据库状态与当前的模型集和迁移同步,生成迁移文件,如果没有参数表示运行所有的应用程序的所有迁移。我们也可以指定某个应用程序进行迁移。示例:
python manage.py migrate
提示
迁移是 Django 将你对模型的修改(例如增加一个字段,删除一个模型)应用至数据库架构中的方式。
你可以将迁移看作是数据库架构的版本控制系统。 makemigrations
负责将模型修改打包进独立的迁移文件中——类似提交修改,而 migrate
负责将其应用至数据库。每个应用的迁移文件位于该应用的 migrations
目录中,他们被设计成应用代码的一部分,与应用代码一起被提交,被发布。你只需在开发机上构建一次,就可以在同事的电脑或测试机上运行同样的迁移而保证结果一致。最后在生产环境运行同样的迁移。
createsuperuser
:创建一个超级用户账户(拥有所有权限的用户)。如果你需要创建一个初始的超级用户账户,或者你需要为你的网站程序化地生成超级用户账户,这很有用。对于需要使用 Django 自带的 Admin 后台的同学来说,这个命令很有用。示例:
python manage.py createsuperuser