gpt4 book ai didi

django-rest defaultRouter 不添加@action

转载 作者:行者123 更新时间:2023-12-02 00:46:22 24 4
gpt4 key购买 nike

我正在阅读http://www.django-rest-framework.org/api-guide/routers#usage并且无法理解 base_name 是什么。我还尝试添加自定义操作,但路由器不会接收它

我有这个观点.py

@authentication_classes((SessionAuthentication, TokenAuthentication))
@permission_classes((IsAuthenticated,))
class utente(CreateModelMixin, RetrieveAPIView, GenericViewSet, ViewSet):

model = MyUser
serializer_class = MyUserSerializer

def retrieve(self, request, *args, **kwargs):
self.object = MyUser.objects.get(
pk = request.user.pk
)
serializer = MyUserSerializerGET(self.object)
return Response(serializer.data)

@action(permission_classes=[IsAuthenticated])#POST action
def customaction(self, request):
return Response( None )
pass

还有这个 urls.py

admin.autodiscover()


router_v1 = routers.DefaultRouter(trailing_slash=True)
router_v1.register(r'register', my_register, 'wtf' )
router_v1.register(r'utente', utente, 'wtf2' )
#router_v1.register(r'utente/customaction', utente.as_view({'post' : 'customaction'}) )

api_urls_v1 = router_v1.urls

api_urls = patterns('',
url(r'^v1/', include(api_urls_v1)),
)

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'wecup.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),

url(r'^admin/', include(admin.site.urls)),
url(r'^login/', 'rest_framework.authtoken.views.obtain_auth_token'),
url(r'^logout/', my_logout ),
url(r'^api/', include(api_urls)),
)

当我打开http://127.0.0.1:8000/api/v1/

HTTP 200 OK Content-Type: application/json Vary: Accept Allow: GET, HEAD, OPTIONS
{
"register": "http://127.0.0.1:8000/api/v1/register/",
"utente": "http://127.0.0.1:8000/api/v1/utente/"



where is customaction?
}

最佳答案

您有两个不同的问题,因此我将分别解决它们。

基础名称

首先,base_name 只是 ViewSet 在生成命名 URL 时使用的名称。默认情况下,这只是您的 model 或可能是您的 queryset,但如果您使用过 ViewSet,您可能需要自动设置它> 的 get_queryset 方法。

如果您没有实现自己的网址名称,则 base_name 将用于为您实现它们。例如,假设您的 ModelMyUser,您的命名网址将类似于 'myuser-list''myuser-详细信息'

如果有兴趣,文档是 here .

@action 和自定义方法

您正在使用 DefaultRouter,它允许您访问 http://127.0.0.1:8000/api/v1/ 处的 API Root View ,如下所示你已经展示了。此 Root View 仅显示 ListView 。使用@action 创建详细 View 。在您的情况下,您的 customaction View 可以在 ^utente/{pk}/customaction/$ 中找到。 它不会显示在 API 根目录中,因为它不是 ListView 。

有关@action和自定义方法的一般信息可以在 here 找到。 。

此外,如果由于某种原因您确实想要将customaction设为列表级 View ,则需要进行一些修改。您可以自己构建自定义路由,而不使用 @action 装饰器(专门用于详细 View )。可以找到一个例子 here .

您的另一个选择是使用新的 drf-extensions包裹。关于使用该包在 ViewSet 中实现集合级别 Controller 的讨论可以在 here 中找到。 .

关于django-rest defaultRouter 不添加@action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23649804/

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