【发布时间】:2018-07-18 09:37:24
【问题描述】:
我有一个旧代码:
我的网址:
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(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'
【问题讨论】:
-
这不是
self.request的一部分。它是self.kwargs的一部分,字段名称是herefield_name。所以self.kwargs['field_name']. -
@WillemVanOnsem 你能检查我的帖子更新吗?
-
顺便说一句,使用基于类的视图并不意味着您需要将所有内容都设为类。像使用
CheckUniqueFieldValue.check_uniqueness一样使用类方法并不是很Pythonic。不过,如果您在视图本身上创建了check_uniqueness方法,那么您可以通过self.check_uniqueness调用它。 -
@DanielRoseman 谢谢你的建议,我会考虑的。
标签: django django-rest-framework django-class-based-views