# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。