【Web应用开发笔记】Django笔记2:一个 Hello World 网页

1. 基础知识

1.1 互联网和万维网

  • 互联网(Internet)是一个广泛的全球互联计算机系统;
  • 万维网(World Wide Web)是互联网的一个子集,指通过超链接相互连接的超文本文档(换句话说,就是网页)。
  • 互联网依赖于各种"通信协议",这些协议类似于人类语言,它们允许世界各地的计算机通过约定的规则进行通信。例如,
    • 文件共享使用文件传输协议(FTP),
    • 发送电子邮件使用简单邮件传输协议(SMTP),
    • 语音通信使用互联网语音协议(VoIP),
    • 而浏览网页使用超文本传输协议(HTTP)

1.2 客户端-服务器 模型

  • 支撑万维网的是客户端-服务器模型
    • "客户端"指任何连接互联网的设备,用于发出服务请求,例如计算机、手机、洗碗机等;
    • "服务器"是回应服务请求的计算机硬件或软件。换句话说,客户端发出请求,服务器返回响应。
  • 支撑互联网的计算机通常被称为服务器
    • 实际上它们只是一直连接到互联网的计算机,运行特殊的软件,使它们能够向其他计算机"提供"信息。
    • 你自己的计算机也可以成为服务器,但实际上大多数服务器都存在于大型数据中心(也称为"云")中。
  • 既然我们在所有这些中都使用 HTTP 协议,我们可以更具体地说:
    • 客户端发出 HTTP 请求
    • 服务器返回 HTTP 响应
  • LearnDjango.com 这样的网站的完整域名实际上是 https://learndjango.com
    • 开头的 https:// 表明我们使用的是 HTTP 协议,
    • HTTPS 是 HTTP 的加密版本,现在占据了大部分网络流量。现代网页浏览器会自动为你添加这个,所以大多数普通用户只需输入域名,而不会意识到背后的 HTTP。
    • 你的网页浏览器将 HTTP 响应中的数据呈现出来,生成网页。每次你点击链接或请求新的网址时,这个 HTTP 请求/响应循环都会重新开始。通信就这样来回进行。

1.3 Django 与 客户端-服务器 模型

  • 网站托管在物理服务器上,并自动处理 HTTP 请求和响应。它依赖于一些后续笔记中介绍的额外机制。
  • 本地开发中,情况要简单得多。Django 配备了一个轻量级的开发服务器 runserver,它管理 HTTP 请求和响应,帮助 Django 从数据库生成动态内容,并提供静态文件(稍后会详细介绍)。它非常强大。

1.4 静态网页 & 动态网页

  • 静态网站
    • 由单个HTML文档组成,这些文档会以原样通过HTTP发送到你的网页浏览器。
    • 这种方法适用于非常小的网站,但当网站需要数百或数千个页面时,很快就会行不通。
  • 动态网站
    • 由数据库、HTML模板和应用服务器组成
    • 应用服务器可以在通过HTTP发送文件到浏览器之前更新这些文件。
    • 大多数大型网站采用这种方法,因为这意味着数百万个网页可以仅通过几个HTML模板、一小部分逻辑和一个大型数据库来生成。

1.5 Django & 动态网页

Django 旨在用于动态网站,大多数网站都需要相同的基本工具:

  • 处理 URL 请求的方法
  • 连接数据库的方法
  • 通过从数据库中过滤数据生成动态内容的方法
  • 创建模板以便根据需要为 HTML 添加样式、CSS、图片等的方法

1.6 MVC & MVT

1.6.1 MVC(传统)

MVC = Model-View-Controller = 模型-视图-控制器

  • 模型(Model):管理数据和核心业务逻辑
  • 视图(View):以特定格式呈现模型数据
  • 控制器(Controller):接收用户输入并执行应用程序特定的逻辑

1.6.2 MVT(Django)

MVT = Model-View-Template = 模型-视图-模板

  • Django 的方法有时被称为模型-视图-模板(MVT)
  • 但它实际上是一个包含 URL 配置的四部分模式。类似模型-视图-模板-URL(MVTU)的说法可能更准确:
    • 模型(Model):管理数据和核心业务逻辑
    • 视图(View):描述哪些数据发送给用户,但不涉及其展示方式
    • 模板(Template):将数据呈现为 HTML,可附加 CSS、JavaScript 和静态资源
    • URL 配置(URL Configuration):将正则表达式组件配置到视图上

1.6.3 两者的关系

  • MVC 中的"视图"类似于 Django 中的"模板"
  • 而 MVC 中的"控制器"则被拆分为 Django 的"视图"和"URL 配置"
MVC MVT
模型 模型
视图 模板
控制器 视图 + URL 配置

1.6.4 ★ Django 工作流程 ★

  • 当你输入一个 URL,比如 https://djangoproject.com
  • 我们的 Django 项目中首先发生的是 runserver 开始运行,并帮助 Django 查找匹配的 URL 模式(包含在 urls.py 中),这个 URL 模式与单个视图(包含在 views.py 中)相关联,
  • 该视图将模型(存储在 models.py 中)中的数据与模板(任何以 .html 结尾的文件)中的样式结合起来。
  • 然后,视图向用户返回 HTTP 响应。

2. 第一个项目

我的系统是 Ubuntu 24.04 LTS

2.1 创建项目

在上一期博客《Web应用开发笔记】Django笔记1:环境安装》中有详细介绍,这里还是简要介绍一遍。

  • step1: 创建 python 环境
bash 复制代码
cd 项目路径
python3.11 -m venv py3p11_Django

注:这里需要有前置准备 python 3.11 的基础环境,可以用 which python3.11 检查一下有没有,如果没有则用 sudo apt install python3.11 python3.11-venv python3.11-dev 命令安装 python

  • step2: 激活环境
bash 复制代码
source py3p11_Django/bin/activate
  • step3: 安装 Django 等包
bash 复制代码
python -m pip install django~=4.2.0
python3 -m pip install black
  • step4: 创建 Django 项目
bash 复制代码
django-admin startproject django_project .
text 复制代码
├── django_project/
│ ├── __init__.py
| ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── py3p11_Django/

说明

• _init _.py 表明该文件夹中的文件是 Python 包的一部分。没有这个文件,我们就无法从另一个目录导入文件

asgi.py 允许运行可选的异步服务器网关接口(Asynchronous Server Gateway Interface)。

settings.py 控制我们的 Django 项目的整体设置。

urls.py 告诉 Django 在响应浏览器或 URL 请求时应该构建哪些页面。

wsgi.py 代表 Web 服务器网关接口(Web Server Gateway Interface),关于这部分我们将在下一篇笔记第一次部署时详细讲解。

manage.py 文件不在 django_project/ 文件夹下,但它用于执行各种 Django 命令,例如运行本地 web 服务器或创建新应用。

2.2 启动项目

  • 启动项目
bash 复制代码
django-admin startproject django_project .

注:此时会有告警You have 18 unapplied migration(s). ,但是可以忽略。告警的原因是尚未"迁移"初始数据库。

  • 初始数据库
    如果执行 python manage.py migrate 命令会出现一个初始数据库 db.sqlite3,此时再重新启动项目则不会有告警
text 复制代码
├── django_project
│ ├── __init__.py
| ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3 # new <===
├── manage.py
└── py3p11_Django/

3. 创建 APP

3.1 什么是 Django 中的 APP

  • 一个 Django 项目可以包含许多"APP",
    • 这是一种保持代码清晰且易于阅读的组织方式,
    • 更关键的是这相当于在做功能解耦
  • 每个应用程序应该控制一个独立的功能模块。例如一个电子商务网站:
    • 可能有一个用于用户认证的应用程序,
    • 另一个用于支付的应用程序,
    • 还有一个用于商品列表详情的应用程序。

3.2 创建一个名为 pages 的APP

3.2.1 自动生成文件

  • 命令
bash 复制代码
 python manage.py startapp pages
  • 生成的文件
text 复制代码
├── pages
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py

说明:

admin.py 是用于内置 Django 管理应用的配置文件

apps.py 是应用本身的配置文件

• migrations/ 用于跟踪我们对 models.py 文件所做的任何更改,从而保持与数据库的同步

models.py 是我们定义数据库模型的地方,Django 会自动将其转换为数据库表

tests.py 用于应用特定的测试

views.py 是处理我们 Web 应用请求/响应逻辑的地方

3.2.2 添加到 settings.py

django_project/settings.py 文件中,找到 INSTALLED_APPS,添加一行 "pages"

python 复制代码
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "pages", # new
]

3.2.3 pages 的 views

  • 对于我们的第一个网站,我们将创建一个输出文本"Hello, World!"的网页

  • 这是一个静态页面,不涉及数据库,甚至不需要模板文件。

  • 这是一个很好地介绍 Django 中视图和 URL 工作方式的例子。

    • 视图是一个接受 Web 请求并返回 Web 响应的 Python 函数。
    • 响应可以是网页的 HTML 内容、重定向、404 错误、图片,或者任何内容。
    • 当请求一个网页时,Django 会自动创建一个包含请求元数据的 HttpRequest 对象。然后 Django 加载相应的视图,将 HttpRequest 作为第一个参数传入视图函数。视图最终负责返回一个 HttpResponse 对象
  • 在我们的 pages 应用中,已经有一个名为 views.py 的文件,该文件带有以下默认代码:

bash 复制代码
from django.shortcuts import render

# Create your views here.

现在将其简单修改成如下内容

bash 复制代码
from django.http import HttpResponse

def home_page_view(request):
    return HttpResponse("Hello, World!")

3.2.4 URLconfs

3.2.4.1 pages 的 urls
  • 在 pages 文件夹下创建一个名为 urls.py 的新文件
  • 里面添加如下代码
python 复制代码
from django.urls import path
from .views import home_page_view

urlpatterns = [
    path("", home_page_view, name="home"),
]
  • 含义
    如果用户请求由空字符串 "" 表示的主页,Django 应该使用名为 home_page_view 的视图。
3.2.4.2 项目的 urls

修改 django_project/urls.py 中的代码如下

python 复制代码
from django.contrib import admin
from django.urls import path, include # new

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("pages.urls")), # new
]

3.3 重启服务

重启服务后打开网页会看到:

4. 小结

4.1 Django服务流程

4.2 如何创建一个不涉及 "模型"、"模版"的网页

  • 创建项目
    • 创建 python 环境、导入 Django 包
    • 创建 Django 项目
  • 创建APP
    • 添加 APP:自动生成文件并添加到 settings.py
    • 写 View:写 views.py 中的函数
    • 写 URL conf:写 APP 和 django_project 中的 urls.py
  • 启动项目

5. 附录1:生成 requirements.txt

requirements.txt 是 Python 项目的依赖清单文件,它的核心作用是:告诉别人(或未来的自己)这个项目需要安装哪些第三方库才能运行。

  • 生成 requirements.txt
bash 复制代码
pip freeze > requirements.txt

注:这里如果用 conda 环境其生成的 requirements.txt 内容会有问题

  • 其他人使用
bash 复制代码
pip install -r requirements.txt
相关推荐
kyle~1 小时前
Python---webbrowser库 跨平台打开浏览器的控制接口
开发语言·python·web
一尘之中1 小时前
量子力学数学基础入门:从态矢到内积外积(附Python演示)
python·ai写作·量子计算
七夜zippoe1 小时前
性能测试实战:Locust负载测试框架深度指南
分布式·python·性能测试·locust·性能基准
有点心急10211 小时前
SQL 执行 MCP 工具开发(一)
人工智能·python·aigc
belldeep2 小时前
python:Flask 3, mistune 2, 实现在线编辑 Markdown 文档的 Web 服务程序
python·flask·markdown·mistune·pygments
apcipot_rain2 小时前
python 多进程多线程 学习笔记
笔记·python·学习
runningshark2 小时前
【DFT】Write About the Photo
笔记
小楼v2 小时前
AI应用对话生成的安全性优化
java·后端·ai·护轨
山岚的运维笔记2 小时前
SQL Server笔记 -- 第78章:MS SQL Server 基本 DDL 操作
数据库·笔记·sql·microsoft·oracle·sqlserver