gpt4 book ai didi

python - 将 django View 转换为 django Rest Framework APIView

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:57 24 4
gpt4 key购买 nike

我正在尝试将 django View 转换为 APIView,这是正常 View ,下面是我尝试过的。

Django View

@method_decorator([login_required, teacher_required], name='dispatch')
class QuizResultsView(DetailView):
model = Quiz
context_object_name = 'quiz'
template_name = 'classroom/teachers/quiz_results.html'

def get_context_data (self, **kwargs):
quiz = self.get_object()

if (quiz.status == 'Assigned'):

"""Some Code"""

cursor = connection.cursor()


def dictfetchall (cursor):
desc = cursor.description
return [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]

""" Some More Code """

extra_context = {'taken_quizzes': taken_quizzes, 'total_taken_quizzes': total_taken_quizzes,
'quiz_score': quiz_score, 'least_bid': least_bid, 'matching_bids': matching_bids,
'driver_num': driver_num, 'lat_lon_orig': lat_lon_orig, 'lat_lon_dest': lat_lon_dest,
'user_pass': user_pass, 'username': username, 'password': password, }


kwargs.update(extra_context)


return super().get_context_data(**kwargs)


else:

cursor = connection.cursor()

def dictfetchall (cursor):
desc = cursor.description
return [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]

cursor.execute('''SELECT STATEMENT''', [quiz.id])

""" Some More Code """


extra_context = {'taken_quizzes': taken_quizzes, 'total_taken_quizzes': total_taken_quizzes,
'quiz_score': quiz_score, 'least_bid': least_bid, 'matching_bids': matching_bids}
kwargs.update(extra_context)

return super().get_context_data(**kwargs)

def get_queryset (self):
return self.request.user.quizzes.all()

根据documentation我补充道:

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}

在我的settings.py中,我使用了return Response(extra_content),而不是return super().get_context_data(**kwargs),但它似乎并没有工作。我做错了什么?

请帮忙!!

最佳答案

作为documentation :

The following settings control the basic API policies, and are applied to every APIView class-based view, or @api_view function based view.

意味着,您所做的更改将反射(reflect)在 APIView 中或 APIView 的子类,不在 DetailView 或任何 django CBV 中。

您可以简单地将 View 转换为 APIView,如下所示:

@method_decorator([login_required, teacher_required], name='dispatch')
class QuizResultsView(APIView):
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404

def get(self, request, pk, format=None):
quiz = self.get_object(pk)
# --- rest of the code ---
return Response(extra_content)

但我建议使用 GenericViewRetrieveAPIView ,并使用serializer序列化数据。

关于python - 将 django View 转换为 django Rest Framework APIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567790/

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