Skip to content

编写第一个Django应用,第一部分

我们通过例子来学习。
在本教程中,我们将引导您创建一个基本的投票应用程序。
它由两部分组成。
- 一个允许人们查看民意调查并进行投票的公共网站。
- 一个管理网站,可让您添加、更改和删除民意调查。

查看当前的Django版本

python -m django --version

创建项目

如果这是您第一次使用 Django,则需要进行一些初始设置。也就是说,您需要自动生成一些代码来建立 Django项目- Django 实例的设置集合,包括数据库配置、Django 特定选项和应用程序特定设置。

从命令行cd进入您想要存储代码的目录,然后运行以下命令:

django-admin startproject mysite

这将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 服务器的入口点,用于为您的项目提供服务。

如何使用 ASGI 进行部署

如何使用 WSGI 进行部署

运行服务

python manage.py runserver

您将在命令行上看到以下输出

正在执行系统检查...
系统检查未发现任何问题。
您有未应用的迁移;在应用它们之前,您的应用程序可能无法正常工作。
运行“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参考

Image title

自动重新加载runserver

开发服务器会根据需要自动为每个请求重新加载 Python 代码。您无需重启服务器即可使代码更改生效。但是,某些操作(例如添加文件)不会触发重启,因此在这些情况下您必须重启服务器。

创建投票应用

在 Django 中编写的每个应用程序都包含一个遵循特定约定的 Python 包。Django 附带一个实用程序,可自动生成应用程序的基本目录结构,因此您可以专注于编写代码,而不是创建目录。

项目和应用有什么区别?

应用是执行某些操作的 Web 应用程序,例如博客系统、公共记录数据库或小型投票应用。项目是特定网站的配置和应用的集合。一个项目可以包含多个应用。一个应用可以存在于多个项目中。

应用可以位于Python 路径中的任何位置。在本教程中,我们将在与文件相同的目录中创建投票应用, manage.py以便可以将其作为自己的顶级模块导入,而不是的子模块mysite。

创建投票应用:要创建您的应用程序,请确保您位于同一目录中,然后manage.py 键入以下命令:

python manage.py startapp polls

这将创建一个目录polls,其布局如下:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

该目录结构将容纳投票应用程序。

编写第一个视图

打开文件polls/views.py 并将以下 Python 代码放入其中:

Example

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

这是 Django 中最简单的视图。要调用该视图,我们需要将其映射到 URL - 为此,我们需要一个 URLconf。

要在 polls 目录中创建 URLconf,请创建一个名为 的文件urls.py。你的应用程序目录现在应如下所示:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

polls/urls.py文件中包含以下代码:

Example

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

下一步是将根 URLconf 指向模块polls.urls。在mysite/urls.py,添加导入并在列表中django.urls.include插入 ,因此可以使用:include()urlpatterns

Example

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

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。使用以下命令验证它是否正常工作:

python manage.py runserver

在浏览器中转到http://localhost:8000/polls/ ,您应该会看到在视图中定义的 文本“ Hello, world. You're at the polls index.index ”

找不到网页?

如果您在此处收到错误页面,请检查您是否要访问 http://localhost:8000/polls/ 而不是 http://localhost:8000/

path()函数传递了四个参数,两个必需参数: routeview,以及两个可选参数:kwargsname。此时,值得回顾一下这些参数的用途。

  • routeroute是包含 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作为第一个参数,并以路由中“捕获”的任何值作为关键字参数。
  • kwargskwargs是可选的关键字参数,它们将传递给视图函数。例如,path('<int:question_id>/', views.detail, name='detail')question_id作为关键字参数传递给视图函数。
  • namename是可选的,它允许您为 URL 指定名称。这使您可以使用reverse()函数,而不必记住包含在 URLconf 中的特定模式。例如,url = reverse('detail', args=(1,))

Done!