gpt4 book ai didi

mysql - Django 休息框架 : Function Based API serializers

转载 作者:行者123 更新时间:2023-11-30 21:52:17 26 4
gpt4 key购买 nike

不请自来,因为我被安排在一个要求如下的 API 项目中:

  • Django
  • Django 休息框架
  • python 3.5
  • API 需要基于函数(因此没有类)

目标是一个 API,它以 JSON 格式返回数据(因此我只需要从 CRUD 设计原则中“读取”)供显示器内部使用。

Django 本身必须连接到默认数据库和遗留 MYSQL 数据(这可行)。我已使用 settings.py 文件完成此操作。

然后我创建了一个名为 museum_api 的新应用程序;这也适用。

之后,我在 python manage.py inspectdb --database=museum_data > models.py 的帮助下构建了遗留数据库的模型上面的代码生成了一个 python 文件,其中包含项目根文件夹“musart”中 MYSQL 数据库中每个表的类(该文件夹包含:manage.py、musart 和 museum_api。)

然后我通过进入名为 museum_api 的文件夹内部创建了一个静态 JSON 响应,并创建了一个文件:views.pyurls.py

我将它们留空了一秒钟,然后返回到根文件夹并进入内部项目文件夹以编辑其中的 urls.py 文件。在该文件中,我添加了:

url(r'', include('museum_api.urls')), 

目的是 API 是人们在访问该子域时遇到的第一件事。这也很好用。

然后我回到文件夹 museum_api 并编辑 views.py 文件以创建两个静态 JSON 响应作为测试:

from rest_framework import status, renderers
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.http import HttpResponse
from django.utils.encoding import smart_text

@api_view(['GET'])
def view(request):
return Response({"name": "HERMÄNN", "test":"mytest"})

@api_view(['GET'])
def hello_world(request):
return Response({"message": "Hello, world!"})

def index(request):
return HttpResponse("""Hello, httpresonse is here!""")

接下来,我编辑了 urls.py 文件:museum_api: 从 django.conf.urls 导入 url 从 。导入 View

urlpatterns = [
url(r'^view$', views.view, name='view'),
url(r'^hello$', views.hello_world, name='hello_world'),
url(r'^$', views.index, name='index'),
]

到目前为止,我理解了所有文档;每当我运行服务器并转到 url 时,我都会得到我期望的索引文件或两个 JSON 响应。

在过去的几天里,我一直坚持让 API 具有交互性……这是项目的重点……我发现所有项目和教程都使用类,这违反了核心要求之一。

在这个阶段我只有问题,没有工作代码...

1) 下一步是为每个 api 方法创建一个函数。这方面的一个示例是使用名为 artist 的 api 方法查询所有艺术家的函数。它应该采用的参数之一是“国家/地区”。向 api 请求数据的一种可能方式是:url?artist;format=json;country=france我会想到这样的事情(伪代码):

def artist_api(request):
data = select * from artists where country = 'france';
return (data)

2) 在 museum_api > views.py 中:为什么我需要在每个新函数之前放置一个 @api_view['GET']?如果我将其遗漏,该功能将停止工作。

3) 如何编写我的序列化程序,以便在 api 收到请求(例如国家/地区示例)时,python 脚本知道要查询哪些数据库并返回正确的数据?

4) 与3相关:我需要在哪里创建serializers.py脚本?在我的 models.py 所在的根文件夹中?还是在应用程序文件夹中?

很抱歉这个问题很长。最好的问候

最佳答案

2) In museum_api > views.py: Why do I need to put an @api_view['GET'] before every new function? If I leave it out, that function stops working.

@api_view 装饰器告诉您的 View 响应提到的 HTTP 方法。查看drf docs了解详情。

3) How do I write my serializers so that if the api gets a request (such as with the country example) the python script know what database(s) to query and to return the correct data?

您的 View 将使用在您的 settings.py 中的 DATABASES 设置中指定的数据库。

如果您使用多个数据库,则需要设置 database routers或者您可以使用 using() 手动选择要查询的数据库 [参见 docs ]

4) Related to 3: Where do I need to create a serializers.py script? In the root folder where my models.py is? Or in the application folder? The usual structure is

application
-- app1
--- models.py
--- serializers.py
--- views.py
-- app2
--- models.py
--- serializers.py
--- views.py
-- application
--- settings.py
--- urls.py
-- manage.py

关于mysql - Django 休息框架 : Function Based API serializers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com