从视图(APIView)中类的url读取字符串

2024-07-04 14:08:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像我的模式如下网址

urlpatterns = [
...
    path('rest-auth/registration/account-confirm-email/<str:key>', VerifyEmailView.as_view(), name='account_confirm_email'),
...
]

我需要能够传递钥匙(“美育:1ggiiI:923vm1cLboPQk9TX1f0aywDWBs8“)来自此示例url:

http://127.0.0.1:8000/rest-auth/registration/account-confirm-email/MjU:1ggiiI:923vm1cLboPQk9TX1f0aywDWBs8/

以下视图:

class VerifyEmailView(APIView):
    permission_classes = (AllowAny,)
    allowed_methods = ('POST','GET', 'OPTIONS', 'HEAD')
....
    def get(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        '''key is used here'''
        self.kwargs['key'] = serializer.validated_data['key']
        confirmation = self.get_object()
        confirmation.confirm(self.request)
....

有人能告诉我如何在这个视图中访问我的密钥吗?你知道吗


Tags: keyselfauth视图restdatagetemail
3条回答

当您使用url参数时,您可以在get()中直接将其作为函数参数获取,请参见下面的示例:

class VerifyEmailView(APIView):
    permission_classes = (AllowAny,)
    allowed_methods = ('POST','GET', 'OPTIONS', 'HEAD')
....
    def get(self, request, key):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        '''key is used here'''
        self.key = key
        confirmation = self.get_object()
        confirmation.confirm(self.request)
....

在这里你可以直接得到“美育:1ggiiI:923vm1cLboPQk9TX1f0aywDWBs8“inkey变量。你知道吗

有关详细信息,请查看this

你可以用

path = request.path
path_vals = path.split('/')
key = path_vals[-2]

尽管nishant和Amit解决方案有效,但这也应该有效

def get(self, request, *args, **kwargs):
      kwargs=self.kwargs
      key=kwargs.get('key')

但是,在这种情况下,Allauth实际上会使用以下表单的url进行投诉:

path('rest-auth/registration/account-confirm-email/<str:key>', VerifyEmailView.as_view(), name='account_confirm_email'),

有这样的错误: 异常值:

TemplateResponseMixin需要“template\u name”的定义或“get\u template\u names()”的实现

并需要表单的url:

path('rest-auth/registration/account-confirm-email/', VerifyEmailView.as_view(), name='account_confirm_email'),

有了这个#nishant解决方案

相关问题 更多 >

    热门问题