我正在使用 DRF 視圖(更具體地說是 APIViews)為游戲實作 API。我已經想出了如何為一個視圖使用多個序列化程式,但我需要這個視圖來組合多個模型,并認為我需要多個 GET 以及多個 POST 方法。這甚至可能嗎?到目前為止,我的代碼如下所示:
class GameView(APIView):
"""
API View that retrieves the game, allows users to post stuff and finally a game session is posted as well once the 5 game rounds have been completed
"""
serializer_class = GametypeSerializer
serializer_class = GamesessionSerializer
serializer_class = GameroundSerializer
serializer_class = ResourceSerializer
serializer_class = VerifiedLabelSerializer
serializer_class = LabelSerializer
def get_serializer_class(self):
if self.request.method == 'POST':
return YOUR_SERIALIZER_1
elif self.request.method == 'GET':
return YOUR_SERIALIZER_2
else:
return YOUR_DEFAULT_SERIALIZER
def get_queryset(self):
gametypes = Gametype.objects.all().filter(name="labeler")
return gametypes
def get(self, request, *args, **kwargs):
# gets a resource and an empty game round object to be completed (according to the game type chosen by the user)
def post(self, request, *args, **kwargs):
# users post a label, that is saved in the label model, a verified model is saved in the verified label model. Once 2 game rounds have been completed, a game session is posted.
我認為值得一提的是,我計劃為此使用單個 url。它應該是這樣作業的:用戶點擊一個游戲型別,然后呼叫這個視圖,游戲開始,所有需要在游戲中處理的事情都得到處理。
uj5u.com熱心網友回復:
如果您真的只想使用一個 url,您可以使用 GET 引數完成它。
def get(self, request, *args, **kwargs):
model = request.GET.get("model")
if model == "Gametype":
.. do something with the Gametype model ..
elif model == "Resource":
.. do something with the Resource model ..
相同,get_serializer_class()因此您知道要使用哪個序列化程式。
然后你會打電話/gameview/?model=Gametype或/gameview/?model=Resource
但是首先使用多個 url 有什么問題呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407048.html
標籤:
