簡體   English   中英

Django Rest Framework:基於函數的API序列化器

[英]Django Rest Framework: Function Based API serializers

我主動要求將我放在一個API項目中,該項目的要求是:

  • Django的
  • Django Rest框架
  • Python 3.5
  • API需要基於函數(因此沒有類)

目標是一個以JSON格式返回數據(因此我只需要從CRUD設計原則中“讀取”)的API,供顯示器內部使用。

Django本身必須連接到默認數據庫和舊版MYSQL數據(可行)。 我已經完成了settings.py文件。

然后,我創建了一個名為museum_api的新應用程序; 這也一樣。

之后,我借助python manage.py inspectdb --database=museum_data > models.py建立了舊數據庫的模型,上面的代碼生成了一個Python文件,其中包含MYSQL數據庫中根目錄中每個表的類(稱為'musart) ”(此文件夾包含: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:from django.conf.urls從導入url。 導入視圖

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

到目前為止,我已經了解了所有文檔。 每當我運行服務器並轉到url時,我都會得到期望的Indexfile或兩個JSON響應。

在過去的幾天里,我一直致力於使API具有交互性……這是項目的重點……我發現所有項目和教程都使用類,這違反了核心要求之一。

在這個階段,我只有問題,沒有工作代碼。

1)下一步將是根據api方法創建一個函數。 這樣的一個示例是一個函數,該函數使用稱為的api方法來查詢所有藝術家: artist 它應該采用的參數之一是“國家/地區”。 向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)在museum_api> views.py中:為什么我需要在每個新函數之前放置一個@api_view ['GET']? 如果我將其保留,該功能將停止工作。

@api_view裝飾器告訴您的視圖響應上述HTTP方法。 有關詳細信息,請參見drf文檔

3)我該如何編寫序列化程序,以便如果api得到請求(例如國家示例),則python腳本知道要查詢哪個數據庫並返回正確的數據?

您的視圖將使用settings.py中的DATABASES設置中指定的DATABASES

如果使用的是多個數據庫,則需要建立數據庫路由器或者可以手動選擇一個數據庫使用利用查詢()[見文檔 ]

4)與3相關:在哪里需要創建serializers.py腳本? 在我的models.py所在的根文件夾中? 還是在應用程序文件夾中? 通常的結構是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM