我在嘗試構建 Django API 時不斷收到錯誤訊息。
我有這門課:
from uuid import UUID
from django.shortcuts import render
from django.http.response import JsonResponse
from django.http.request import HttpRequest
from rest_framework import viewsets, status
from rest_framework.parsers import JSONParser
from rest_framework.response import Response
from Instruments import serializers
from Instruments.services import InstrumentsService
from rest_framework.decorators import api_view
from Instruments.services import InstrumentsService
from Instruments.models import Instrument
from Instruments.serializers import InstrumentsSerializer
# Application views live here
class InstrumentViewSet(viewsets.ViewSet):
# instruments = Instrument.objects.all()
def __init__(self):
# self.instrument_service = InstrumentsService()
# self.instruments = Instrument.objects.all()
super().__init__()
def list(self, request: HttpRequest):
try:
self.instruments = Instrument.objects.all()
serializer = InstrumentsSerializer(self.instruments, many=True)
# data = self.instrument_service.get_instruments()
data = serializer.data
return JsonResponse(data, status=status.HTTP_200_OK, safe=False)
except Exception as exc:
return JsonResponse(
{"Status": f"Error: {exc}"},
status=status.HTTP_400_BAD_REQUEST,
safe=False,
)
當init () 方法正在定義時,即使它只是在pass執行 django 服務器在我發送請求時也會給我這個錯誤:
TypeError at /api/
__init__() got an unexpected keyword argument 'suffix'
如果我洗掉或注釋掉 init() 方法,它會起作用。為什么?
uj5u.com熱心網友回復:
“得到了一個意外的關鍵字引數”例外是相當具有描述性的。這意味著您的類實體(在本例中為您的 ViewSet 實體)已使用您未處理的關鍵字引數進行初始化。這可以通過在您的init方法中執行以下操作來解決:
def __init__(self, **kwargs):
# self.instrument_service = InstrumentsService()
# self.instruments = Instrument.objects.all()
super().__init__(**kwargs)
這是必需的,因為超類 (View) 在實體初始化時使用 **kwargs。
作為記錄,這并沒有像預期的那樣使用 Django。Django 從來就不是用于服務層的,使用這樣的init方法會適得其反,因為 ViewSet 需要一個查詢集變數。我鼓勵你在繼續你的這個專案之前更徹底地閱讀檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367921.html
上一篇:API連接并獲取回傳結果
