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 query_param = request.GET.get('param_name') form_data = request.POST.get('field_name') 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': return HttpResponse("Get Response") elif request.method == '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): 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): return HttpResponse("GET Response") def post(self, request): 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)
|
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 框架推荐使用 DRF
的 Response
对象
2. 视图的分类
(1)函数视图
(2)类视图
- 通过继承实现代码复用,适合复杂场景(如
ListView
, DetailView
)
3. 相关参考
B 站视频