繁体   English   中英

如何在 django 中构建 json REST API(没有 Django REST 框架)

[英]How to build a json REST API in django (without Django REST framework)

前言

我有一个 Django 项目。 我已经把它连接起来,所以它为一堆模型提供了一堆视图。 现在我想添加一个端点,它只是将数据库的很大一部分转储为 json。

我假设你这样做的方法是向视图类/方法添加一个 URL,它返回一个充满 json 的 HTTPResponseObject。 不幸的是,经过相当多的谷歌搜索后,我只能找到对Django REST framework 的引用。 这是你认为 Django 会在内部提供而不是作为外部插件库的一部分的那种东西。 但是搜索 django 文档并没有立即得到答案——我认为没有关于如何构建一个只提供一堆 json 的端点的文档。

问题:

  • 我真的需要“Django REST framework”来在 Django 中提供 json 服务吗?
  • 我是否忽略了 Django 中为 json 提供服务的文档?
  • 在 Django 项目中提供 json 的规范方式是什么?

经过更多的谷歌搜索,我在 Django 文档中找到了我想要的东西: JsonResponse

from django.http import JsonResponse
return JsonResponse({'foo':'bar'})

我认为使用“REST”这个词在谷歌上搜索是一种红鲱鱼,这使得搜索空间总是将我的查询导向“Django REST framework”,这不是我想要的,尽管我确实想添加一个 RESTful API。

您可以使用此方法编写 GET API,但对于 POST 方法,这不起作用。 对于 Post 方法,我们需要使用一些 REST 库。

POST 方法将检查 cookie 中的 CSRF 令牌以及它无法执行请求的位置,因为您的 django 服务器会将此请求视为伪造的。

你应该使用 Django Rest Framework 但如果你想自己做,那么:

  1. 对于 POST 请求,如果客户端将数据作为 JSON 发送给您,那么您可以使用 json 模块从请求正文中读取数据。
import json

def add_new_user(self, request):
    data = request.body.decode('utf8')
    data = json.loads(data)
  1. 如果发送纯名称/值对,则使用 request.POST 或 request.GET

  2. 使用 JsonResponse 发送响应

  3. 认证后,服务器通常会向客户端发送一个令牌。 然后,客户端在向“受保护”api 端点发送请求时发送该令牌。 自定义标头(如 auth_token)用于发送令牌。

在服务器代码中,您需要执行诸如 request.META['HTTP_AUTH_TOKEN'] 之类的操作来获取令牌(请参阅Django 中的自定义 HTTP 标头

还有更多的事情需要考虑,比如 CSRF 令牌或 JWT。

请参阅此站点以获取完整示例https://jee-appy.blogspot.com/2018/02/make-rest-api-django.html 请注意,它使用旧版本的 django。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM