Django4.2 学习 - 视图 View(七)

1. 视图主要作用

Django 视图(View)的主要作用可以概括为以下三点:

(1)请求处理中心

  • 接收并处理 HTTP 请求,协调模型(Model)和模板(Template)之间的数据流动

1️⃣请求对象获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def handle_request(request):
# 获取请求方法类型
method = request.method # GET/POST/PUT/DELETE

# 获取查询参数(适用于 GET)
query_param = request.GET.get('param_name')

# 获取表单数据(适用于 POST)
form_data = request.POST.get('field_name')

# 获取原始数据(适用于 JSON)
raw_data = json.loads(request.body)

# 获取文件上传
uploaded_file = request.FILES.get('file_field')

2️⃣请求类型处理

1
2
3
4
5
6
7
8
def multi_method_view(request):
if request.method == 'GET':
# 处理 GET 请求逻辑
return HttpResponse("Get Response")

elif request.method == 'POST':
# 处理 POST 请求逻辑
return HttpResponse("Post Response")

3️⃣装饰器处理(推荐方式)

1
2
3
4
5
6
7
8
9
from django.views.decorators.http import require_http_methods

@require_http_methods(["GET", "POST"])
def decorated_view(request):
# 同时处理 GET 和 POST 请求
if request.method == 'GET':
return HttpResponse("Get Data")
elif request.method == 'POST':
return HttpResponse("Post Received")

4️⃣类视图处理

1
2
3
4
5
6
7
8
9
10
from django.views import View

class MyView(View):
def get(self, request):
# 处理 GET 请求
return HttpResponse("GET Response")

def post(self, request):
# 处理 POST 请求
return HttpResponse("POST Response")

(2)业务逻辑承载

  • 包含核心业务逻辑:

1️⃣数据库操作(增删改查)

2️⃣表单数据处理

3️⃣权限验证

4️⃣会话管理

(3)响应生成器

  • 返回 HTTP 响应,支持多种格式,()响应的常用方法

1️⃣基础文本响应

1
2
3
4
5
6
7
from django.http import HttpResponse

def text_response(request):
return HttpResponse("纯文本内容", content_type='text/plain')

# 带状态码的响应
return HttpResponse("Created", status=201)

2️⃣JSON 响应

1
2
3
4
5
from django.http import JsonResponse

def json_response(request):
data = {'status': 'success', 'code': 200}
return JsonResponse(data) # 自动设置 Content-Type 为 application/json

3️⃣模板渲染响应

1
2
3
4
5
from django.shortcuts import render

def template_response(request):
context = {'name': 'John'}
return render(request, 'template.html', context)

4️⃣重定向响应

1
2
3
4
5
6
7
from django.http import HttpResponseRedirect
from django.urls import reverse

def redirect_response(request):
return HttpResponseRedirect('/target-url/') # 硬编码方式
# 或使用反向解析
return HttpResponseRedirect(reverse('view-name'))

5️⃣文件流响应

1
2
3
4
5
6
from django.http import FileResponse

def file_response(request):
return FileResponse(open('file.pdf', 'rb'),
filename='document.pdf',
content_type='application/pdf')

6️⃣特殊响应类型:

  • StreamingHttpResponse:用于流式传输大文件
  • HttpResponseNotFound:404 快捷响应
  • HttpResponseForbidden:403 快捷响应

(4)实际开发中根据场景选择:

1️⃣API 接口优先用 JsonResponse

2️⃣网页渲染用 render

3️⃣文件下载用 FileResponse

4️⃣REST 框架推荐使用 DRFResponse 对象

2. 视图的分类

(1)函数视图

  • 适合简单逻辑

(2)类视图

  • 通过继承实现代码复用,适合复杂场景(如 ListView, DetailView

3. 相关参考

B 站视频