初级 Part I

安装

验证环境

python -m django --version

如果这行命令输出了一个版本号,证明你已经安装了此版本的 Django;如果你得到的是一个“No module named django”的错误提示,则表明你还未安装。

创建项目

如果这是你第一次使用 Django 的话,你需要一些初始化设置。也就是说,你需要用一些自动生成的代码配置一个 Django project —— 即一个 Django 项目实例需要的设置项集合,包括数据库配置、Django 配置和应用程序配置。

打开命令行,cd 到一个你想放置你代码的目录,然后运行以下命令:

$ django-admin startproject mysite

这行代码将会在当前目录下创建一个 mysite 目录。如果命令失败了,查看 运行 django-admin 时遇到的问题,可能能给你提供帮助。

让我们看看 startproject 创建了些什么:

mysite/		//  最外层的 mysite/ 根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。
    manage.py		//  一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 django-admin 和 manage.py 获取所有 manage.py 的细节。
    mysite/		//   目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
        __init__.py  //  一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
        settings.py  //  Django 项目的配置文件。
        urls.py		// Django 项目的 URL 声明,就像你网站的“目录”。
        asgi.py		 //  作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口。
        wsgi.py		// 作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。

这里的ASGI和WSGi分别是指什么:

ASGI 和 WSGI 都是用于 Python Web 应用程序的通用接口规范。

WSGI(Web Server Gateway Interface)是 Python Web 应用程序和 Web 服务器之间的通用接口规范。它定义了一个标准的接口,使得 Web 应用程序和 Web 服务器之间可以进行交互。WSGI 被广泛应用于许多 Python Web 框架,例如 Django、Flask 等。WSGI 通常用于传统的同步 Web 服务器和应用程序之间的通信。

ASGI(Asynchronous Server Gateway Interface)是在 Python 3.5 引入的新的异步 Web 服务器接口规范。它是对 WSGI 的扩展,支持异步的 Web 服务器和应用程序之间的通信。ASGI 适用于处理异步请求、长连接、实时通信等场景,例如 WebSocket。ASGI 被用于诸如 Django Channels 这样的异步 Web 框架。

因此,当你在 Django 项目中看到 mysite/asgi.py 和 mysite/wsgi.py 文件时,它们分别是用于在 ASGI 兼容的 Web 服务器和 WSGI 兼容的 Web 服务器上运行你的 Django 项目的入口文件。

用于开发的简易服务器

让我们来确认一下你的 Django 项目是否真的创建成功了。如果你的当前目录不是外层的 mysite 目录的话,请切换到此目录,然后运行下面的命令:

$ python 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.

七月 09, 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.

服务器现在正在运行,通过浏览器访问 http://127.0.0.1:8000/ 。你将看到一个“祝贺”页面,有一只火箭正在发射。你成功了!

你已经启动了 Django 开发服务器,这是一个用纯 Python 编写的轻量级网络服务器。我们在 Django 中包含了这个服务器,所以你可以快速开发,而不需要处理配置生产服务器的问题 -- 比如 Apache -- 直到你准备好用于生产。

现在是个提醒你的好时机:千万不要 将这个服务器用于和生产环境相关的任何地方。这个服务器只是为了开发而设计的。(我们在网络框架方面是专家,在网络服务器方面并不是。)

(To serve the site on a different port, see the runserver reference.)

会自动重新加载的服务器 runserver

用于开发的服务器在需要的情况下会对每一次的访问请求重新载入一遍 Python 代码。所以你不需要为了让修改的代码生效而频繁的重新启动服务器。然而,一些动作,比如添加新文件,将不会触发自动重新加载,这时你得自己手动重启服务器。

创建投票应用

现在你的开发环境——这个“项目” ——已经配置好了,你可以开始干活了。

在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构,这样你就能专心写代码,而不是创建目录了。

项目 VS 应用

项目和应用有什么区别?应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者小型的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。

你的应用可以存放在任何 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 代码输入进去:

polls/views.py

from django.http import HttpResponse


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

这是 Django 中可能的最基本视图。要在浏览器中访问它,我们需要将其映射到一个 URL - 为此,我们需要定义一个 URL 配置,简称为 "URLconf"。这些 URL 配置是在每个 Django 应用程序内定义的,它们是名为 urls.py 的 Python 文件。

要为 polls 应用程序定义一个 URLconf,请创建一个名为 polls/urls.py 的文件,并使用以下内容:

polls/urls.py

from django.urls import path

from . import views

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

你的应用目录应该像这样:

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

下一步是在 mysite 项目中配置全局 URLconf,以包含在 polls.urls 中定义的 URLconf。要做到这一点,在 mysite/urls.py 中添加一个对 django.urls.include 的导入,并在 urlpatterns 列表中插入一个 include(),使得你有:

mysite/urls.py

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

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

函数 include() 允许引用其它 URLconfs。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。

我们设计 include() 的理念是使其可以即插即用。因为投票应用有它自己的 URLconf( polls/urls.py ),他们能够被放在 "/polls/" , "/fun_polls/" ,"/content/polls/",或者其他任何路径下,这个应用都能够正常工作。

何时使用 include()

当包括其它 URL 模式时你应该总是使用 include()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。现在,是时候来研究这些参数的含义了。

path() 参数: route

route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。

这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/

path() 参数: view

当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。稍后,我们会给出一个例子。

path() 参数: kwargs

任意个关键字参数可以作为一个字典传递给目标视图函数。本教程中不会使用这一特性。

path() 参数: name

为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。

当你了解了基本的请求和响应流程后,请阅读 教程的第 2 部分 开始使用数据库.

 

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录