Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest框架自定义端点_Django_Django Rest Framework - Fatal编程技术网

Django Rest框架自定义端点

Django Rest框架自定义端点,django,django-rest-framework,Django,Django Rest Framework,我最近继承了一个用Django和DRF构建的API。我需要向API中添加一些端点,但以前从未使用过Django或DRF,因此我正在尝试尽快提高速度 我想知道如何做自定义端点,而不仅仅是从后端数据库转换数据。例如,一个端点可以从数据库中读取数据,然后编译一个报告并以JSON格式将其返回给调用方。但我认为现在最简单的方法是,当端点被命中时,只在日志中打印“Hello World”,并返回一个空白页面 如果这看起来很基本,我道歉。我一直在阅读文档,到目前为止,我所能看到的都是关于序列化程序的东西,而我

我最近继承了一个用Django和DRF构建的API。我需要向API中添加一些端点,但以前从未使用过Django或DRF,因此我正在尝试尽快提高速度

我想知道如何做自定义端点,而不仅仅是从后端数据库转换数据。例如,一个端点可以从数据库中读取数据,然后编译一个报告并以JSON格式将其返回给调用方。但我认为现在最简单的方法是,当端点被命中时,只在日志中打印“Hello World”,并返回一个空白页面

如果这看起来很基本,我道歉。我一直在阅读文档,到目前为止,我所能看到的都是关于序列化程序的东西,而我真正需要的是能够调用自定义代码块


谢谢。

DRF行动是一个不错的选择


该操作允许您为想要做的事情选择一个相关的视图,这样您就可以将内容弹出到继承的API中。无需额外设置,它们显示在常规路线旁边。

DRF操作是一个不错的选择


该操作允许您为想要做的事情选择一个相关的视图,这样您就可以将内容弹出到继承的API中。无需额外设置,它们显示在常规路由旁边。

如果希望REST端点具有所有:获取、发布、放置、删除等功能,则必须在URL中注册路由。py:

URL.py:

from rest_framework import routers
from django.urls import path, include
from . import views

router = routers.DefaultRouter()
router.register(r'hello', views.HelloWorldViewSet)

urlpatterns = [
    # Wire up our API using automatic URL routing.
    # rest_framework api routing
    path('api/', include(router.urls)),
    # This requires login for put/update while allowing get (read-only) for everyone.
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
现在,url:/hello/指向HelloWorldViewSet

在views.py中添加HelloWorldViewSet,它将从rest_framework.viewsets.ViewSet类继承。您可以通过定义以下“操作”来覆盖ViewSet默认类行为:list()、create()、retrieve()、update()、partial_update()、destroy()。要在
GET
上显示
“hello world”
,只需覆盖
list()

因此,在您的views.py中:

from rest_framework import viewsets
from rest_framework.response import Response

class HelloWorldViewSet(viewsets.ViewSet):
    def list(self, response):
        return Response('Hello World')
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action

class HelloWorldViewSet(viewsets.ViewSet):
    @action(detail=False)
    def report(self, request, **kwargs):
        return Response('Hello World')
因此,在更高级的
list()
函数中,您必须与数据库交互,以检索所需的数据,对其进行处理,并将报告创建为json可序列化字典,并将其作为
响应
对象返回

如果不想覆盖标准的
列表
操作,可以将新的
操作
添加到
HelloWorldViewSet
中,我们称之为
报告

因此,在您的views.py中:

from rest_framework import viewsets
from rest_framework.response import Response

class HelloWorldViewSet(viewsets.ViewSet):
    def list(self, response):
        return Response('Hello World')
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action

class HelloWorldViewSet(viewsets.ViewSet):
    @action(detail=False)
    def report(self, request, **kwargs):
        return Response('Hello World')
我希望这就是你想要的


请注意,如果您对
POST
PUT
PATCH
DELETE
等不感兴趣,则不需要django rest框架。。。您只需向
URL.py
添加一个
路径
,该路径指向一个Django视图函数,该函数返回一个Django
JsonResponse
对象,该对象包含您的报告。

如果您希望REST端点具有所有功能:获取、发布、放置、删除等,则必须在URL.py中注册路由:

URL.py:

from rest_framework import routers
from django.urls import path, include
from . import views

router = routers.DefaultRouter()
router.register(r'hello', views.HelloWorldViewSet)

urlpatterns = [
    # Wire up our API using automatic URL routing.
    # rest_framework api routing
    path('api/', include(router.urls)),
    # This requires login for put/update while allowing get (read-only) for everyone.
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
现在,url:/hello/指向HelloWorldViewSet

在views.py中添加HelloWorldViewSet,它将从rest_framework.viewsets.ViewSet类继承。您可以通过定义以下“操作”来覆盖ViewSet默认类行为:list()、create()、retrieve()、update()、partial_update()、destroy()。要在
GET
上显示
“hello world”
,只需覆盖
list()

因此,在您的views.py中:

from rest_framework import viewsets
from rest_framework.response import Response

class HelloWorldViewSet(viewsets.ViewSet):
    def list(self, response):
        return Response('Hello World')
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action

class HelloWorldViewSet(viewsets.ViewSet):
    @action(detail=False)
    def report(self, request, **kwargs):
        return Response('Hello World')
因此,在更高级的
list()
函数中,您必须与数据库交互,以检索所需的数据,对其进行处理,并将报告创建为json可序列化字典,并将其作为
响应
对象返回

如果不想覆盖标准的
列表
操作,可以将新的
操作
添加到
HelloWorldViewSet
中,我们称之为
报告

因此,在您的views.py中:

from rest_framework import viewsets
from rest_framework.response import Response

class HelloWorldViewSet(viewsets.ViewSet):
    def list(self, response):
        return Response('Hello World')
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action

class HelloWorldViewSet(viewsets.ViewSet):
    @action(detail=False)
    def report(self, request, **kwargs):
        return Response('Hello World')
我希望这就是你想要的


请注意,如果您对
POST
PUT
PATCH
DELETE
等不感兴趣,则不需要django rest框架。。。您只需在
url.py
中添加一个
路径
,该路径指向一个Django视图函数,该函数返回一个包含您的报告的Django
JsonResponse
对象。

您需要先阅读DRF文档并熟悉它们提供的方法。你可以很容易地实现你所需要的。您只需不使用DRF即可完成。进行计算,最后返回
JsonResponse
,并将其与结果字典一起提供。如果您想以DRF、json的方式进行交互,那么您可以查看DRF,您需要先阅读DRF文档并熟悉它们提供的方法。你可以很容易地实现你所需要的。您只需不使用DRF即可完成。进行计算,最后返回
JsonResponse
,并将其与结果字典一起提供。如果你想以DRF、json的方式进行交互,那么你可以看看DRF的@thompsbp,这就是你想要的吗?是的,这很完美。谢谢。@thompsbp这就是你想要的吗?是的,这太完美了。非常感谢。