路由层 URLConf
路由的作用,是决定“一个请求该交给哪个视图处理”。
为什么需要路由
浏览器访问网站时,请求的只是一个 URL,例如:
text
/users/
/articles/
/login/Django 必须知道:
/users/该交给哪个函数处理/articles/该交给哪个函数处理
这件事就是路由在做。
最基础的路由配置
urls.py:
python
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path("admin/", admin.site.urls),
path("hello/", views.hello),
]视图:
python
from django.http import HttpResponse
def hello(request):
return HttpResponse("你好,Django")当你访问:
text
http://127.0.0.1:8000/hello/页面就会显示:
text
你好,Django路由匹配
路由本质上就是“路径匹配规则”。
如果路径匹配成功,请求就会进入对应视图。
路由参数
有些页面不是固定路径,而是带参数,例如文章详情页:
python
path("article/<int:article_id>/", views.article_detail)视图中:
python
def article_detail(request, article_id):
return HttpResponse(f"文章编号是:{article_id}")访问:
text
/article/12/页面会显示:
text
文章编号是:12自定义转换器
默认常见转换器有:
strintsluguuid
它们的作用,是限制 URL 参数的格式。
路由分级
项目变大后,通常不会把所有路由都写在一个文件里,而是按 app 拆开。
主路由:
python
from django.urls import path, include
urlpatterns = [
path("users/", include("users.urls")),
]这样结构会更清晰。
重定向
有时一个页面不再直接显示内容,而是跳转到另一个地址:
python
from django.shortcuts import redirect
def old_page(request):
return redirect("/new-page/")静态文件
路由学到后面,你会碰到静态文件访问问题,例如:
- 图片
- CSS
- JS
这些资源通常不会走普通业务路由,但你必须知道它们和页面路由是两回事。
学这一页的目标
- 看懂一条路由是怎么写的
- 会把路径绑定到视图
- 会接收路径参数
- 知道大项目里为什么要拆分路由