Django Rest框架自定义端点
我最近继承了一个用Django和DRF构建的API。我需要向API中添加一些端点,但以前从未使用过Django或DRF,因此我正在尝试尽快提高速度 我想知道如何做自定义端点,而不仅仅是从后端数据库转换数据。例如,一个端点可以从数据库中读取数据,然后编译一个报告并以JSON格式将其返回给调用方。但我认为现在最简单的方法是,当端点被命中时,只在日志中打印“Hello World”,并返回一个空白页面 如果这看起来很基本,我道歉。我一直在阅读文档,到目前为止,我所能看到的都是关于序列化程序的东西,而我真正需要的是能够调用自定义代码块Django Rest框架自定义端点,django,django-rest-framework,Django,Django Rest Framework,我最近继承了一个用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视图函数,该函数返回一个DjangoJsonResponse
对象,该对象包含您的报告。如果您希望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视图函数,该函数返回一个包含您的报告的DjangoJsonResponse
对象。您需要先阅读DRF文档并熟悉它们提供的方法。你可以很容易地实现你所需要的。您只需不使用DRF即可完成。进行计算,最后返回JsonResponse
,并将其与结果字典一起提供。如果您想以DRF、json的方式进行交互,那么您可以查看DRF,您需要先阅读DRF文档并熟悉它们提供的方法。你可以很容易地实现你所需要的。您只需不使用DRF即可完成。进行计算,最后返回JsonResponse
,并将其与结果字典一起提供。如果你想以DRF、json的方式进行交互,那么你可以看看DRF的@thompsbp,这就是你想要的吗?是的,这很完美。谢谢。@thompsbp这就是你想要的吗?是的,这太完美了。非常感谢。