【问题标题】:How to print something when I use django REST framework?使用 django REST 框架时如何打印内容?
【发布时间】:2017-04-07 02:16:18
【问题描述】:

我使用 django REST 框架。 在我看来.py 有一个类:

class TaskViewSet(viewsets.ModelViewSet):

    queryset = Task.objects.all().order_by('-date_created')
    serializer_class = TaskSerializer
    print("leo test in TaskViewSet")

每次调用url时都想打印("leo test in TaskViewSet")。

但在我使用 runserver cmd 后它只会打印 1 次。

任何人都知道每次我调用 api url 时如何打印("leo test in TaskViewSet")。

我的 urls.py:

from django.conf.urls import url,include
from django.contrib import admin
from rest_framework import routers
from trips.views import TaskViewSet


router = routers.DefaultRouter()
router.register(r'task',TaskViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    #url(r'^$', hello_world),
    url(r'^', include(router.urls)),
]

非常感谢。

【问题讨论】:

  • 如果您使用基于类的视图,您需要在这些类中使用 get/post/put/delete 方法。然后你需要在方法中添加打印。现在它只在类初始化时被调用一次,这发生在服务器启动时。 django-rest-framework.org/api-guide/views

标签: django django-rest-framework


【解决方案1】:

您必须定义操作以获得所需的行为。默认情况下,您定义的路由器绑定到多个操作,如创建、检索、列出、更新和销毁。因此,当您通过以下方法实现这些操作时,您将能够在每个端点调用上打印。

class TaskViewSet(viewsets.ModelViewSet):

    queryset = Task.objects.all().order_by('-date_created')
    serializer_class = TaskSerializer
    print("leo test in TaskViewSet")

    def list(self, request):
        print("leo test in TaskViewSet")
        return Response("leo test in TaskViewSet", status=status.HTTP_404_NOT_FOUND)

    def create(self, request):
        print("leo test in TaskViewSet")
        return Response("leo test in TaskViewSet", status=status.HTTP_404_NOT_FOUND)


    def retrieve(self, request, pk=None):
        print("leo test in TaskViewSet")
        return Response("leo test in TaskViewSet", status=status.HTTP_404_NOT_FOUND)


    def update(self, request, pk=None):
        print("leo test in TaskViewSet")
        return Response("leo test in TaskViewSet", status=status.HTTP_404_NOT_FOUND)


    def partial_update(self, request, pk=None):
        print("leo test in TaskViewSet")
        return Response("leo test in TaskViewSet", status=status.HTTP_404_NOT_FOUND)


    def destroy(self, request, pk=None):
        print("leo test in TaskViewSet")
        return Response("leo test in TaskViewSet", status=status.HTTP_404_NOT_FOUND)

如果有什么不清楚的地方请告诉我。另请阅读此处了解更多详情http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 2019-11-27
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2018-04-08
    相关资源
    最近更新 更多