基于 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']
访问这些参数。但这些参数默认情况下也传递给 get
、post
等函数。所以你需要抓住这些(并可选择忽略):
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)
的函数,它将 args
和 kwargs
作为属性存储在实例中。
或者直接用这些更方便:
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>)
)
我有一个遗留代码:
我的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']
访问这些参数。但这些参数默认情况下也传递给 get
、post
等函数。所以你需要抓住这些(并可选择忽略):
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)
的函数,它将 args
和 kwargs
作为属性存储在实例中。
或者直接用这些更方便:
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>)
)