django 如何为不存在的端点返回自定义响应?

9q78igpj  于 2023-03-04  发布在  Go
关注(0)|答案(2)|浏览(115)

如何向不存在端点返回查询的JSON响应?
例如:查询*/api/rock?q = 123 ,但api只有/api/paper *,服务器返回 ('error ':"找不到端点"} 之类的。
我正在使用Django Rest框架3.14.0,Django 4.1.7,请帮助。
我在www.example.com中选中了 * exception_handler *,但是我如何为不存在的端点返回自定义响应呢?views.py, but how can I return a custom response for non-existent endpoints?
我已经阅读了文档,但是我无法完成这个操作。返回Django资源未找到的默认响应。

htrmnn0y

htrmnn0y1#

我解决了这个问题,我的意图是,给出终点,例如:*/api/paper ,当api接收到其他不存在端点的请求时,服务器将返回一个json响应,类似于 {" error ":"终结点不存在".}
我是如何解决的:
在项目根目录的 * urls. py * 中,添加了 * handler404 ='utils.views.error_404'

  • 项目结构:
|- root
|   |- urls.py
|
|- utils
|  |- views.py
|
|- app
    • 查看次数. py *
from django.http import JsonResponse

def error_404(request, exception):
    message = "Resource not found."
    return JsonResponse(data={'message': message}, status=404)

def error_500(exception):
    message = "D\'oh, something was wrong."
    return JsonResponse(data={'error': message}, status=404)
    • 网址. py *
handler404 = 'utils.views.error_404'
handler500 = 'utils.views.error_500'
wtlkbnrh

wtlkbnrh2#

这将捕获“/API”下的所有请求并给予正确的响应。

from flask import render_template, jsonify

# assuming you already have your app initiated.

@app.route("/api", defaults={'path': ''})
@app.route("/api/<path:path>")
def api(path):
  try:
    return render_template(path+"/index.html") # try to match the API endpoint
  except: # endpoint not found
    return jsonify({'error': 'endpoint not found'})

相关问题