Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 *已解决*端点共享URL的一部分_Django_Django Rest Framework - Fatal编程技术网

Django *已解决*端点共享URL的一部分

Django *已解决*端点共享URL的一部分,django,django-rest-framework,Django,Django Rest Framework,我目前正在使用Django Rest Framework构建一个API,我想要两个视图集。一个与我的用户模型相关,一个用于验证用户电子邮件的单一路由(您将当前有效的令牌发布到端点)。看起来是这样的: UserViewSet,允许发布、获取、放置、修补、删除 VerifyUserViewSet,仅允许发布 在我的路由器中,以下是我的配置: router=routers.DefaultRouter() 路由器注册(“用户”,用户视图集,“用户”) 路由器注册(“用户/验证”,VerifyUser

我目前正在使用Django Rest Framework构建一个API,我想要两个视图集。一个与我的用户模型相关,一个用于验证用户电子邮件的单一路由(您将当前有效的令牌发布到端点)。看起来是这样的:

  • UserViewSet,允许发布、获取、放置、修补、删除
  • VerifyUserViewSet,仅允许发布
在我的路由器中,以下是我的配置:

router=routers.DefaultRouter()
路由器注册(“用户”,用户视图集,“用户”)
路由器注册(“用户/验证”,VerifyUserViewset,“用户/验证”)
我的问题如下:“users/verify”允许GET请求(当它不应该时),因为它以“request”作为用户id以“users”端点为目标。

如果我更改路由器中的顺序,那么“用户”只接受POST,因为端点的目标是“用户/验证”。这似乎是因为它们共享相同的url部分“用户”

有没有一种方法可以绕过此行为,以便在不更改端点url的情况下它们不会重叠

谢谢

编辑 序列化程序:

类VerifyUserSerializer(serializers.ModelSerializer):
# ----------------------------------------
#元,创建,更新
# ----------------------------------------
类元:
model=UserProfile
字段=[“验证令牌”]
# ----------------------------------------
#自定义验证
# ----------------------------------------
def验证令牌(自身,令牌):
“”“使令牌成为必需的,并将其值与数据库进行比较”“”
#空头支票
message=gettext(“需要验证令牌”)
令牌=为空(令牌、消息)
#查找匹配的用户
user=try\u get\u对象(UserProfile,verification\u token=token)
如果不是用户:
message=gettext(“无效的验证令牌”)
引发序列化程序。验证错误(消息)
#返回不变
返回令牌
视图集:

类VerifyUserViewset(ViewSet.GenericViewSet):
# ----------------------------------------
#背景
# ----------------------------------------
权限\类=(permissions.AllowAny,)
serializer\u class=VerifyUserSerializer
# ----------------------------------------
#行动
# ----------------------------------------
def创建(self、request、*args、**kwargs):
“”“POST:使用其令牌验证用户”“”
#表单验证
serializer=self.get\u序列化程序(data=request.data)
serializer.is\u有效(raise\u exception=True)
#验证用户
令牌=序列化程序。已验证的\u数据[“验证\u令牌”]
user=UserProfile.objects.get(验证令牌=token)
用户验证\电子邮件\验证()
返回响应(无,状态=状态。HTTP_202_已接受)

我在Django Rest Framework API指南中找到了解决方案:


因为我有一个“users/”端点,并且想要使用一个“users/verify/”端点,所以我必须向我的UserViewset(绑定到“users/”的那一个)添加一个操作,该操作指向/verify/

你能添加你的
VerifyUserViewset
吗?我已经编辑了我的帖子,并添加了序列化程序和视图集