视图与 URL
将请求路由到视图
视图与 URL 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
什么是视图
Django 视图是一个接收 Web 请求并返回 Web 响应的函数(或类)。视图包含页面逻辑,位于应用的 views.py 中。
from django.http import HttpResponse
def home(request):
return HttpResponse('Hello, world!')
print('A view takes request, returns response')request 参数
每个视图都会接收一个 request 对象,其中包含传入请求的详细信息:方法、GET/POST 数据、用户等。
from django.http import HttpResponse
def info(request):
return HttpResponse('Method: ' + request.method)
print('request carries the incoming data')URL 模式
应用的 urls.py 使用名为 urlpatterns 的列表和 path() 函数,将 URL 路径映射到视图。
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home),
]
print('path maps a URL to a view')命名 URL
为模式设置一个 name,这样您就可以在其他地方引用它,而不必将路径硬编码。
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
print("name='home' lets you reference it later")URL 参数
使用 <int:post_id> 等转换器捕获 URL 的部分内容。捕获的值会传递给视图。
from django.urls import path
from . import views
urlpatterns = [
path('post/<int:post_id>/', views.detail, name='detail'),
]
print('post/5/ -> detail(request, post_id=5)')读取参数
捕获的值会作为关键字参数传入,其名称与转换器的名称相匹配。
from django.http import HttpResponse
def detail(request, post_id):
return HttpResponse('Post ' + str(post_id))
print('View receives post_id')引入应用 URL
项目的根 urls.py 使用 include() 引入每个应用的 URL 配置,从而保持路由的模块化。
# mysite/urls.py
from django.urls import path, include
urlpatterns = [
path('blog/', include('blog.urls')),
]
print('include() wires up app urls')渲染模板
render() 快捷函数会将模板与上下文字典结合起来,并返回一个 HttpResponse。
from django.shortcuts import render
def home(request):
return render(request, 'home.html', {'name': 'Alice'})
print('render combines template + context')404 辅助工具
get_object_or_404() 会获取对象;如果对象不存在,则引发 404。这是一种常见且安全的模式。
from django.shortcuts import get_object_or_404, render
from .models import Post
def detail(request, post_id):
post = get_object_or_404(Post, id=post_id)
return render(request, 'detail.html', {'post': post})
print('get_object_or_404 handles missing data')反向解析 URL
在 Python 中,reverse('detail', args=[5]) 根据模式名称构建 URL。在模板中,{% url %} 标签执行相同的操作。
from django.urls import reverse
# reverse('detail', args=[5]) -> '/blog/post/5/'
# In a template: {% url 'detail' post.id %}
print('reverse builds URLs from names')基于类的视图
Django 还提供了 基于类的视图,例如 ListView 和 DetailView,用更少的代码处理常见模式。
from django.views.generic import ListView
from .models import Post
class PostList(ListView):
model = Post
print('ListView lists objects automatically')快速检查
测试您对视图和 URL 的掌握情况。
总结
您学会了将请求路由到视图。
- 视图接收
request并返回响应 urlpatterns+path()将 URL 映射到视图,也可以选择设置name<int:id>等转换器可以捕获 URL 的部分内容include()用于连接应用 URL;render()和get_object_or_404()是实用的快捷函数
常见问题解答
「视图与 URL」课时是免费的吗?
是的 — 「视图与 URL」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「视图与 URL」这节课中我会学到什么?
将请求路由到视图 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「视图与 URL」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 项目与应用
- 模型与迁移
- 视图与 URL
- Django 管理后台