Django - 创建视图
Django - 创建视图
Section titled “Django - 创建视图”在 Django 中,视图(view)是一个 Python 函数或类,它接收一个 Web 请求(web request)并返回一个 Web 响应(web response)。这个响应可以是网页的 HTML 内容、一个重定向、一个 404 错误、一个 XML 文档、一个 JSON 响应、一个图像,或者浏览器可以显示的任何其他内容。视图包含应用程序的业务逻辑(business logic)。
视图通常在你的 Django 应用内的 views.py 文件中定义。
简单的基于函数的视图(FBV)
Section titled “简单的基于函数的视图(FBV)”让我们在 myapp/views.py 文件中创建一个简单的视图,它返回一个基本的 HTML 问候语:
from django.http import HttpResponse
def hello(request): html_content = "<h1>Welcome to my app!</h1>" return HttpResponse(html_content)在这个视图中:
- 我们从
django.http导入了HttpResponse。 - 我们定义了一个名为
hello的函数,它接受一个参数:request,这是一个代表传入 Web 请求的HttpRequest对象。 - 该函数返回一个
HttpResponse对象,其中包含我们想要显示的 HTML 内容。 - 要通过 URL 访问此视图,你需要在
urls.py文件中将一个 URL 模式(URL pattern)映射到它(这将在 URL 映射章节中介绍)。
直接在视图中硬编码 HTML 通常是一种不好的做法。Django 的模板系统(template system)允许你将表示层(HTML)与逻辑层(Python)分离。让我们修改视图以使用模板。
首先,创建一个模板文件。按照约定,应用 myapp 的模板通常放在 myapp/templates/myapp/ 目录下。创建 myapp/templates/myapp/hello.html 文件:
<!DOCTYPE html><html><head> <title>Hello Page</title></head><body> <h1>{{ greeting }}</h1></body></html>注意:请确保你的 settings.py 文件在 TEMPLATES 设置中包含了 APP_DIRS=True,以便 Django 能够自动找到应用模板。
现在,更新 myapp/views.py 中的视图,以使用 render 快捷函数:
from django.shortcuts import render
def hello(request): context = {'greeting': 'Welcome to my app, rendered via template!'} return render(request, 'myapp/hello.html', context)在这里:
- 我们从
django.shortcuts导入了render。 - 我们创建了一个
context字典。这个字典中的键将成为模板中可用的变量。 render函数接收request对象、模板文件的路径以及context字典。- 它使用
context渲染模板并返回一个HttpResponse对象。
带参数的视图
Section titled “带参数的视图”视图经常需要处理通过 URL 传递的参数。例如,根据 ID 显示某个特定项。
让我们创建一个视图,它接受来自 URL 的一个数字:
from django.http import HttpResponse
def show_number(request, number): html_content = f"<h1>Displaying number: {number}!</h1>" return HttpResponse(html_content)这个视图现在接受一个额外的参数 number。如何从 URL 中捕获这个参数是在 urls.py 中定义的。我们使用了 f-string (Python 3.6+) 来实现更简洁的字符串格式化。
基于类的视图(CBVs)
Section titled “基于类的视图(CBVs)”Django 还支持基于类的视图(Class-Based Views),它们有助于组织代码,通过继承实现重用,并更有效地处理常见模式(如显示表单或对象列表)。Django 提供的通用 CBVs(Generic CBVs)特别有用(将在后面介绍)。
进一步阅读:Django 视图文档