第1节 入门
文章目录
- 1. URL 组成部分详解
- 2. 第一个 Django 项目
- 2.1 项目结构
- 2.2 project 和 app 的关系
- 3. URL 与视图函数的映射
- 4. URL 的两种传参方式
- 4.1 通过字符串查询
- 4.2 在 path 中携带
- 5. path 函数详解
- 6. 路由模块化
- 7. 路由反转
1. URL 组成部分详解
URL 的基本组成格式
scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
-
scheme(protocol):协议
- 常用协议:hrrp、https、ftp等
-
username、password:用户名、密码
- 某些情况下 URL 需要提供用户名和密码才能访问
-
hostname:主机地址
- 可以是域名或 IP 地址
-
port:端口
-
http://localhost:8080
-
服务器设定的端口
-
-
path:路径
- 网络资源在服务器中的指定地址
-
parameters:参数
- 用来指定访问某个资源时的附加信息
-
query:查询
- 用来查询某类资源
- 如有多个查询,则用 & 隔开
-
fragment:片段
- 对资源描述的部分补充
- 两个主要应用
- 单页面路由:Vue、React 都可以借助它来做路由管理
- HTML 锚点:控制一个页面打开时自动下滑滚动到某个特定的位置
2. 第一个 Django 项目
- 通过 Pycharm 选择 Django 项目自动创建
2.1 项目结构
- 项目名称
asgi.py
:项目的入口,用于异步服务器网关接口 (ASGI) 配置- ASGI 是一种新的协议,支持异步编程,适用于 WebSocket 等异步任务
settings.py
:项目的全局配置文件- 数据库配置
- 静态文件路径
- 安装的应用程序列表
- 中间件配置
- 安全设置
- 等
urls.py
:管理 URL 路由,定义用户请求的路径和对应视图函数之间的映射关系wsgi.py
: 项目的入口,用于同步服务器网关接口 (WSGI) 配置- WSGI 是一种规范,用于同步 Web 请求处理
- Django 默认使用它来部署
manage.py
:管理和执行 Django 命令(python manage.py [子命令]
)- 运行服务器
- 迁移数据库
- 创建应用
- 等
2.2 project 和 app 的关系
-
app
:Django 项目的组成部分- 一个
app
代表项目中的一个模块,所有 URL 请求的响应都是由app
来处理
python manage.py startapp 模块名称
- 一个
-
project
:由许多app
组成- 一个
app
可以被用到其他项目
- 一个
3. URL 与视图函数的映射
-
修改初始界面
-
urls.py
from django.http import HttpResponse def index(request): return HttpResponse("Welcome") urlpatterns = [ path("", index), ]
- 定义的跳转函数中第一个参数必须为
request
- 定义的跳转函数中第一个参数必须为
4. URL 的两种传参方式
4.1 通过字符串查询
-
book/views.py
from django.http import HttpResponse def book_detail_query_string(request): # 通过字段查询 http://localhost:8000/book?id=3 book_id = request.GET.get("id") # 等同于 request.GET["id"] 但是 get 方法更加安全,当属性不存在时会返回 None 而不是抛出异常 return HttpResponse(f"book id: {book_id}")
-
urls.py
from book import views urlpatterns = [ path("book", views.book_detail_query_string), ]
4.2 在 path 中携带
-
book/views.py
from django.http import HttpResponse def book_detail_path_variable(request, book_id): # 在 path 中携带参数 http://localhost:8000/book/3 return HttpResponse(f"book id: {book_id}")
-
urls.py
from book import views urlpatterns = [ path("book/<int:book_id>", views.book_detail_path_variable), # 添加数据类型限制输入,并限定views.py接收到的book_id为整形 ]
5. path 函数详解
path(route, view, kwargs=None, name=None)
- route: 字符串,定义 URL 的路径部分
- 可以包含变量,例如
<int:my_variable>
,以从 URL 中捕获参数并将其传递给视图函数 - 常用数据类型
str
:不包含斜杠(/
)的非空字符串(默认)int
:非负整数slug
:横杠(-
)或下划线(_
)与字符或数字组成的字符串uuid
:uuid
字符串path
:非空字符串
- 可以包含变量,例如
- view: 视图函数,处理与给定路由匹配的请求
- 可以是一个函数或一个基于类的视图
- kwargs(可选): 一个字典,包含传递给视图函数的额外关键字参数
- name(可选): 为 URL 路由指定一个唯一的名称,以便在代码的其他地方引用它
- 这对于在模板中生成 URL 或在代码中进行重定向等操作非常有用
6. 路由模块化
-
book/urls.py
from django.urls import path from . import views app_name = "book" # 指定应用名称(命名空间) urlpatterns = [ path("list", views.book_list, name="book_list"), path("detail/<int:book_id>", views.book_detail, name="book_detail"), ]
-
book/views.py
from django.http import HttpResponse def book_list(request): return HttpResponse(f"Book list") def book_detail(request, book_id): return HttpResponse(f"Book detail: {book_id}")
-
urls.py
from django.urls import include urlpatterns = [ path("book/", include("book.urls")) ]
7. 路由反转
-
urls.py
from django.http import HttpResponse from book import views from django.urls import reverse def index(request): print(reverse("index")) # / print(reverse("book:book_list")) # 获取 app 中的反转需要使用分号,即 app 名称 : url 名称 # /book/list print(reverse("book:book_detail", kwargs={"book_id": 3})) # /book/detail/3 return HttpResponse("Welcome") urlpatterns = [ path("", index, name='index'), path("book/", include("book.urls")), ]
-
reverse()
函数不区分GET
和POST
,因此无法处理请求的参数