@require_http_methods(["POST"])
:
@require_http_methods(["POST"])
是 Django 提供的装饰器,确保该视图函数只能处理指定的 HTTP 方法(如 POST 请求)。- 如果客户端使用其他的 HTTP 方法(如 GET, PUT, DELETE),Django 会自动返回 HTTP 405 (Method Not Allowed) 错误。
- 它的作用是简化对 HTTP 方法的限制,而不用手动在视图里检查
request.method
。
没有**@require_http_methods注解,需要方法内部自己if request.method == 'POST':
**
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 如果你没有启用 CSRF token 可以加上这个装饰器, 但要注意安全性
def add_car(request):
if request.method == 'POST':
try:
# 读取并解析 JSON 请求体
data = json.loads(request.body.decode('utf-8'))
# 从 JSON 数据中获取参数
car_name = data.get('name')
car_model = data.get('model')
# 在这里可以处理接收到的数据,例如保存到数据库
# Car.objects.create(name=car_name, model=car_model)
return JsonResponse({'status': 'success', 'message': 'Car added successfully'})
except json.JSONDecodeError:
return JsonResponse({'status': 'error', 'message': 'Invalid JSON'}, status=400)
else:
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=405)
@csrf_exempt:
禁用视图的 CSRF 保护,不注释全局csrf中间件,使用此注解即可完成单个请求的csrf保护取消