# Django中怎么实现请求响应 ## 一、Django请求响应流程概述 Django成熟的Web框架,其请求响应处理遵循MTV模式(Model-Template-View),核心流程如下: 1. **请求接收**:Web服务器将HTTP请求传递给Django 2. **URL路由**:通过urls.py匹配对应的视图函数 3. **视图处理**:视图函数处理业务逻辑 4. **响应返回**:生成HTTP响应返回给客户端 ## 二、核心组件详解 ### 1. HttpRequest对象 当Django接收到HTTP请求时,会自动创建`HttpRequest`对象,包含所有请求数据: ```python def my_view(request): # request就是HttpRequest实例 print(request.method) # 请求方法:GET/POST等 print(request.GET) # GET参数 print(request.POST) # POST数据 print(request.headers) # 请求头信息
from django.http import HttpResponse def simple_response(request): return HttpResponse("Hello World", content_type="text/plain")
from django.shortcuts import render def template_view(request): context = {'name': 'Django'} return render(request, 'template.html', context)
from django.http import JsonResponse def api_example(request): data = {'status': 'success', 'code': 200} return JsonResponse(data)
def download_file(request): file = open('report.pdf', 'rb') response = HttpResponse(file, content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="report.pdf"' return response
Django提供了更结构化的类视图:
from django.views import View from django.http import JsonResponse class ApiView(View): def get(self, request): return JsonResponse({'method': 'GET'}) def post(self, request): return JsonResponse({'method': 'POST'})
from django.http import HttpResponseNotFound def special_case(request): if condition: return HttpResponse("正常响应") else: return HttpResponseNotFound("页面不存在")
常用状态码快捷方法: - HttpResponseRedirect
(302) - HttpResponsePermanentRedirect
(301) - HttpResponseBadRequest
(400) - HttpResponseForbidden
(403) - HttpResponseServerError
(500)
Django的中间件可以在请求/响应过程中插入处理逻辑:
# middleware.py class CustomMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 请求处理前 print("Before view") response = self.get_response(request) # 响应处理后 print("After view") return response
对于大文件或实时数据:
from django.http import StreamingHttpResponse def stream_response(request): def data_iterator(): yield "第一段数据\n" yield "第二段数据\n" return StreamingHttpResponse(data_iterator())
@cache_page
装饰器)django-debug-toolbar
调试响应时间解决中文乱码:
response = HttpResponse(content_type="text/html; charset=utf-8")
处理跨域请求: 安装django-cors-headers
包
大文件上传处理: 配置FILE_UPLOAD_MAX_MEMORY_SIZE
设置
通过以上方式,开发者可以灵活处理Django中的各种请求响应场景,构建健壮的Web应用。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。