我有一个旧代码:
我的网址:
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
但是现在我想使其成为基于类的:
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'
我该怎么办? tnx
更新: 我将视图更改为:
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'
答案 0 :(得分:4)
这些URL参数存储在self.kwargs
中,因此您可以使用self.kwargs['field_name']
访问它们。但是,这些参数(默认情况下)还传递给get
,post
等函数。因此,您需要捕获这些(并且可以忽略):
class CheckUniqueUsername(ApiView):
def get(self, request, *args, **kwargs):
return HttpResponse(
CheckUniqueFieldValue.check_uniqueness("username", self.kwargs['field_name'])
)
未命名参数存储在self.args
中。因此,您可以将基于类的视图视为具有def view(request, *args, **kwargs)
的某种功能,该功能将args
和kwargs
存储为实例中的属性。
或更方便的是直接使用这些:
class CheckUniqueUsername(ApiView):
def get(self, request, *args, field_name=None, **kwargs):
return HttpResponse(
CheckUniqueFieldValue.check_uniqueness("username", field_name)
)