一、编写你的第一个 Django 应用

109 阅读5分钟

pip安装Django

python3 -m pip install Django

安装完成后查看版本

python3 -m django --version

在想要的目录下创建mysite工程

python3 -m django startproject mysite

创建成功后目录结构

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • 外部 mysite/ 根目录是项目的容器。它的名字对 Django 来说并不重要;您可以将其重命名为您喜欢的任何名称
  • manage.py :一个命令行实用程序,可让您以各种方式与此 Django 项目进行交互。你可以在 django-admin 和 manage.py 中阅读所有详细信息 manage.py 。
  • 内部 mysite/ 目录是项目的实际 Python 包。它的名称是用于导入其中的任何内容的 Python 包名称(例如)。 mysite.urls
  • mysite/__init__.py :一个空文件,告诉 Python 此目录应被视为 Python 包。如果您是 Python 初学者,请在官方 Python 文档中阅读有关包的更多信息。
  • mysite/settings.py :此 Django 项目的设置/配置。Django 设置将告诉你所有关于设置如何工作的信息
  • mysite/urls.py :此 Django 项目的 URL 声明;你的 Django 驱动的站点的“目录”。您可以在 URL 调度程序中阅读有关 URL 的更多信息。
  • mysite/asgi.py :ASGI 兼容 Web 服务器的入口点,用于为您的项目提供服务。有关详细信息,请参阅如何使用 ASGI 进行部署。
  • mysite/wsgi.py :WSGI 兼容 Web 服务器的入口点,用于为您的项目提供服务。有关更多详细信息,请参阅如何使用 WSGI 进行部署。

开发服务器

验证Django 项目是否有效。切换到外部 mysite 目录(如果尚未打开),然后运行以下命令:

python3 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

January 16, 2024 - 15:50:53
Django version 5.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

暂时忽略有关未应用数据库迁移的警告;我们很快就会处理数据库。

  • 现在我们启动了 Django 开发服务器,这是一个纯用 Python 编写的轻量级 Web 服务器。我们已经将它包含在 Django 中,因此您可以快速开发东西,而无需处理配置生产服务器(例如 Apache)直到您准备好投入生产。

  • 不要在类似于生产环境的任何环境中使用此服务器。它仅供在开发时使用。

  • 现在服务器正在运行,用浏览器访问 http://127.0.0.1:8000/。你会看到如下页面

image.png

更改端口

默认情况下,该 runserver 命令在端口 8000 的内部 IP 上启动开发服务器。

如果要更改服务器的端口,请将其作为命令行参数传递。例如,以下命令在端口 8080 上启动服务器:

$ python3 manage.py runserver 8080

如果要更改服务器的 IP,请将其与端口一起传递。例如,要侦听所有可用的公共 IP(如果您正在运行 Vagrant 或想要在网络上的其他计算机上展示您的工作,这将非常有用),请使用:

$ python3 manage.py runserver 0.0.0.0:8000

可以在 runserver  参考中找到开发服务器的完整文档。

自动重新加载 runserver

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

创建投票应用

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

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

python3 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 代码放入其中

polls/views.py

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 文件中包括以下代码:

from django.urls import path

from . import views

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

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

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 变得容易。由于polls位于自己的 URLconf ( polls/urls.py ) 中,因此它们可以放置在“/polls/”、“/fun_polls/”、“/content/polls/”或任何其他路径根目录下,并且应用程序仍然可以工作。

在包含其他 URL 模式时,应始终使用 include() 。 admin.site.urls 例外。

现在,您已将 index 视图连接到 URLconf 中。使用以下命令验证它是否正常工作

python3 manage.py runserver

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

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

path() 参数: route (必须)

route 是包含 URL 模式的字符串。在处理请求时,Django 从第一个模式开始 urlpatterns ,然后沿着列表向下走,将请求的 URL 与每个模式进行比较,直到找到一个匹配的模式。

模式不搜索 GET 和 POST 参数,也不搜索域名。例如,在https://www.example.com/myapp/ 请求中,URLconf 将查找 myapp/  在https://www.example.com/myapp/?page=3 请求中,URLconf 还将查找 myapp/ .

path() 参数: view (必须)

当 Django 找到一个匹配的模式时,它会调用指定的视图函数,将对象 HttpRequest 作为第一个参数,从路由中捕获的任何“捕获”值作为关键字参数。我们稍后会举一个例子。

path() 参数: kwargs (可选)

可以在字典中将任意关键字参数传递到目标视图。我们不会在本教程中使用 Django 的这个功能。

path() 参数: name (可选)

命名你的 URL 可以让你从 Django 的其他地方明确地引用它,尤其是从模板中。这个强大的功能允许您对项目的 URL 模式进行全局更改,同时只接触单个文件。