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

基于django类的视图意外的关键字参数,django,django-rest-framework,django-class-based-views,Django,Django Rest Framework,Django Class Based Views,我有一个遗留代码: 我的网址: url(r'^check_unique_username/(?P<field_value>(.*?){1,150})/$', auth.views.check_unique_username, name='check_unique_username'), 与localhost:8000/check\u unique\u username/myusername完美配合 但现在我想让它基于类: 网址: 这引起 TypeError:get获

我有一个遗留代码:

我的网址:

url(r'^check_unique_username/(?P<field_value>(.*?){1,150})/$',
        auth.views.check_unique_username, name='check_unique_username'),
与localhost:8000/check\u unique\u username/myusername完美配合

但现在我想让它基于类:

网址:

这引起

TypeError:get获得意外的关键字参数“username”

我该怎么办?tnx

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

class CheckUniqueUsername(APIView):

    def get(self):
        return HttpResponse(CheckUniqueFieldValue.check_uniqueness("username", self.kwargs['field_value']))
但还是会出错
TypeError:get获得一个意外的关键字参数“field\u value”

这些URL参数存储在self.kwargs中,因此您可以使用self.kwargs['field\u name']访问这些参数。但是默认情况下,这些参数也会传递给get、post等函数。因此,您需要捕捉这些信息并选择性地忽略:

class CheckUniqueUsername(ApiView):

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

这不是self.request的一部分。它是self.kwargs的一部分,字段名在这里是field_name。所以self.kwargs['field_name'].@WillemVanOnsem你能检查一下我的帖子更新吗?顺便说一下,使用基于类的视图并不意味着你需要把所有东西都变成类。像使用CheckUniqueFieldValue.check\u唯一性一样使用classmethods不是很像Python。不过,如果您将检查唯一性作为视图本身的一种方法,那么您可以通过self调用它。检查唯一性。@DanielRoseman谢谢您的建议,我会考虑的。
class CheckUniqueUsername(APIView):

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

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

    def get(self, request, *args, **kwargs):
        return HttpResponse(
            CheckUniqueFieldValue.check_uniqueness("username", self.kwargs['field_name'])
        )
class CheckUniqueUsername(ApiView):

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