hsb*_*r13 2 django django-class-based-views django-rest-framework
我有一个遗留代码:
我的网址:
url(r'^check_unique_username/(?P<field_value>(.*?){1,150})/$',
auth.views.check_unique_username, name='check_unique_username'),
Run Code Online (Sandbox Code Playgroud)
我的看法:
def check_unique_username(request, field_value):
return HttpResponse(check_unique_filed_value(request, "username", field_value))
Run Code Online (Sandbox Code Playgroud)
完美配合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'),
Run Code Online (Sandbox Code Playgroud)
看法:
class CheckUniqueUsername(APIView):
def get(self):
return HttpResponse(CheckUniqueFieldValue.check_uniqueness("username", self.request.get('username')))
Run Code Online (Sandbox Code Playgroud)
这引发了
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']))
Run Code Online (Sandbox Code Playgroud)
但仍然收到错误
TypeError: get() got an unexpected keyword argument 'field_value'
这些 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'])
)Run Code Online (Sandbox Code Playgroud)
未命名的参数存储在self.args. 因此,您可以将基于类的视图视为某种函数,它将和作为属性def view(request, *args, **kwargs)存储在实例中。argskwargs
或者更方便的是直接使用这些:
class CheckUniqueUsername(ApiView):
def get(self, request, *args, field_name=None, **kwargs):
return HttpResponse(
CheckUniqueFieldValue.check_uniqueness("username", field_name)
)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |