基于 django class 的视图意外关键字参数

django class-based view unexpected keyword argument

我有一个遗留代码:

我的url:

url(r'^check_unique_username/(?P<field_value>(.*?){1,150})/$',
        auth.views.check_unique_username, name='check_unique_username'),

我的看法:

 def check_unique_username(request, field_value):
        return HttpResponse(check_unique_filed_value(request, "username", field_value))

localhost:8000/check_unique_username/myusername

完美配合

但现在我想让它基于class:

url:

url(r'^check_unique_username/(?P<field_value>(.*?){1,150})/$',
        auth.views.CheckUniqueUsername.as_view(), name='check_unique_username'),

查看:

class CheckUniqueUsername(APIView):

    def get(self):
        return HttpResponse(CheckUniqueFieldValue.check_uniqueness("username", self.request.get('username')))

提高

TypeError: get() got an unexpected keyword argument 'username'

我该怎么办?发送


更新: 我将我的观点更改为:

class CheckUniqueUsername(APIView):

    def get(self):
        return HttpResponse(CheckUniqueFieldValue.check_uniqueness("username", self.kwargs['field_value']))

但仍然出现错误 TypeError: get() got an unexpected keyword argument 'field_value'

这些 URL 参数存储在 self.kwargs 中,因此您可以使用 self.kwargs['field_name'] 访问这些参数。但这些参数默认情况下也传递给 getpost 等函数。所以你需要抓住这些(并可选择忽略):

class CheckUniqueUsername(ApiView):

    def get(self<b>, request, *args, **kwargs</b>):
        return HttpResponse(
            CheckUniqueFieldValue.check_uniqueness("username", <b>self.kwargs['field_name']</b>)
        )

未命名参数存储在self.args中。因此,您可以将基于 class 的视图视为某种具有 def view(request, *args, **kwargs) 的函数,它将 argskwargs 作为属性存储在实例中。

或者直接用这些更方便:

class CheckUniqueUsername(ApiView):

    def get(self<b>, request, *args, <b>field_name=None</b>, **kwargs</b>):
        return HttpResponse(
            CheckUniqueFieldValue.check_uniqueness("username", <b>field_name</b>)
        )