编写第一个Django应用,第一部分
我们通过例子来学习。
在本教程中,我们将引导您创建一个基本的投票应用程序。
它由两部分组成。
- 一个允许人们查看民意调查并进行投票的公共网站。
- 一个管理网站,可让您添加、更改和删除民意调查。
查看当前的Django版本
创建项目
- 如果这是您第一次使用 Django,则需要进行一些初始设置。也就是说,您需要自动生成一些代码来建立 Django项目- Django 实例的设置集合,包括数据库配置、Django 特定选项和应用程序特定设置。
-
从命令行cd进入您想要存储代码的目录,然后运行以下命令:
-
这将mysite在当前目录中创建一个目录。如果不起作用,请参阅运行 django-admin 时出现问题。
-
您需要避免使用内置 Python 或 Django 组件来命名项目。具体来说,这意味着您应避免使用类似 django(这会与 Django 本身冲突)或test(这会与内置 Python 包冲突)的名称。
-
让我们看看startproject创建了什么:
mysite/ # 根目录是项目的容器。其名称对 Django 来说无关紧要;您可以将其重命名为任何您喜欢的名称。 manage.py # 这是一个命令行工具,用于管理您的 Django 项目。 mysite/ # 是项目的实际 Python 包。其名称是导入其中任何内容时需要使用的 Python 包名称(例如mysite.urls)。 __init__.py # 这是一个 Python 包初始化文件。它告诉 Python 此目录是一个 Python 包,并确保其子目录包含在 Python 的导入路径中。 settings.py # 这是 Django 项目的设置文件。 urls.py # 这是 Django 项目的 URL 配置文件。 asgi.py # 这是 Django 项目的 ASGI 配置文件。兼容 ASGI 的 Web 服务器的入口点,用于为您的项目提供服务。 wsgi.py # WSGI 兼容 Web 服务器的入口点,用于为您的项目提供服务。
运行服务
-
您将在命令行上看到以下输出
正在执行系统检查...
系统检查未发现任何问题。
您有未应用的迁移;在应用它们之前,您的应用程序可能无法正常工作。
运行“python manage.py migration”来应用它们。
2024 年 7 月 4 日 - 15:50:53
Django 版本 5.0,使用设置“mysite.settings”从http://127.0.0.1:8000/启动开发服务器,使用 CONTROL-C 退出服务器。 -
现在服务器已运行,请使用 Web 浏览器访问http://127.0.0.1:8000/。您将看到一个“恭喜!”页面,其中有一枚火箭正在起飞。成功了!
-
您已启动 Django 开发服务器,这是一个纯用 Python 编写的轻量级 Web 服务器。我们已将其包含在 Django 中,以便您可以快速开发,而无需在准备好进行生产之前配置生产服务器(例如 Apache)。
-
现在需要注意的是:不要在任何类似生产环境中使用此服务器。它仅供开发时使用。
-
要在不同的端口上提供站点服务,请参阅runserver参考。
-
自动重新加载runserver
开发服务器会根据需要自动为每个请求重新加载 Python 代码。您无需重启服务器即可使代码更改生效。但是,某些操作(例如添加文件)不会触发重启,因此在这些情况下您必须重启服务器。
创建投票应用
- 在 Django 中编写的每个应用程序都包含一个遵循特定约定的 Python 包。Django 附带一个实用程序,可自动生成应用程序的基本目录结构,因此您可以专注于编写代码,而不是创建目录。
-
项目和应用有什么区别?
应用是执行某些操作的 Web 应用程序,例如博客系统、公共记录数据库或小型投票应用。项目是特定网站的配置和应用的集合。一个项目可以包含多个应用。一个应用可以存在于多个项目中。
-
应用可以位于Python 路径中的任何位置。在本教程中,我们将在与文件相同的目录中创建投票应用, manage.py以便可以将其作为自己的顶级模块导入,而不是的子模块mysite。
-
创建投票应用:要创建您的应用程序,请确保您位于同一目录中,然后manage.py 键入以下命令:
-
这将创建一个目录polls,其布局如下:
-
该目录结构将容纳投票应用程序。
编写第一个视图
- 打开文件polls/views.py 并将以下 Python 代码放入其中:
-
这是 Django 中最简单的视图。要调用该视图,我们需要将其映射到 URL - 为此,我们需要一个 URLconf。
-
要在 polls 目录中创建 URLconf,请创建一个名为 的文件urls.py。你的应用程序目录现在应如下所示:
-
在
polls/urls.py
文件中包含以下代码: -
下一步是将根
URLconf
指向模块polls.urls
。在mysite/urls.py
,添加导入并在列表中django.urls.include
插入 ,因此可以使用:include()urlpatterns
-
该
include()
函数允许引用其他URLconf
。每当 Django 遇到时include()
,它都会截断匹配到该点的 URL 部分,并将剩余的字符串发送到包含的 URLconf 进行进一步处理。 -
背后的想法
include()
是让即插即用的 URL 变得简单。由于投票位于其自己的 URLconf (polls/urls.py
) 中,因此可以将它们放置在“/polls/”
下,或“/fun_polls/”
下,或“/content/polls/”
下,或任何其他路径根下,应用程序仍可正常工作。 -
何时使用include()
include()
当包含其他 URL 模式时, 您应该始终使用。admin.site.urls
是唯一的例外。 -
现在您已将
index
视图连接到 URLconf。使用以下命令验证它是否正常工作: -
在浏览器中转到
http://localhost:8000/polls/
,您应该会看到在视图中定义的 文本“ Hello, world. You're at the polls index.index ”
。 -
找不到网页?
如果您在此处收到错误页面,请检查您是否要访问
http://localhost:8000/polls/
而不是http://localhost:8000/
。 -
该
path()
函数传递了四个参数,两个必需参数:route
和view
,以及两个可选参数:kwargs
和name
。此时,值得回顾一下这些参数的用途。route
:route
是包含URL
模式的字符串。处理请求时,Django 从第一个模式开始urlpatterns
,然后沿着列表向下查找,将请求的 URL 与每个模式进行比较,直到找到匹配的模式。模式不会搜索 GET 和 POST 参数或域名。例如,在对 的请求中https://www.example.com/myapp/
,URLconf 将查找myapp/
。在对 的请求中https://www.example.com/myapp/?page=3
,URLconf 还将查找myapp/
。view
:当 Django 找到匹配的模式时,它会调用指定的视图函数,以对象HttpRequest
作为第一个参数,并以路由中“捕获”的任何值作为关键字参数。kwargs
:kwargs
是可选的关键字参数,它们将传递给视图函数。例如,path('<int:question_id>/', views.detail, name='detail')
将question_id
作为关键字参数传递给视图函数。name
:name
是可选的,它允许您为 URL 指定名称。这使您可以使用reverse()
函数,而不必记住包含在 URLconf 中的特定模式。例如,url = reverse('detail', args=(1,))
。