Python 从django rest框架url获取参数值时出现问题
我有一个django项目,它有一个API视图。api视图与一个url相关联,该url接受url中的一个参数和?在参数中。我试图抓住url中的参数,它是Python 从django rest框架url获取参数值时出现问题,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个django项目,它有一个API视图。api视图与一个url相关联,该url接受url中的一个参数和?在参数中。我试图抓住url中的参数,它是widget\u id,将其用作过滤器。我遇到了一个错误 视图: 网址: URL参数作为命名参数传递给方法(get、post、put等): def put(self,request,pk,widget_id,format=None): user\u id=self.request.query\u params.get('user\u id')) u
widget\u id
,将其用作过滤器。我遇到了一个错误
视图:
网址:
URL参数作为命名参数传递给方法(
get
、post
、put
等):
def put(self,request,pk,widget_id,format=None):
user\u id=self.request.query\u params.get('user\u id'))
user\u widget=PersonWidgetDefinition.objects.all()\
.filter(widget\u definition\u id=widget\u id,person\u id=user\u id).count()
如果用户_widget==0:
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 201\u已创建)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u请求)
如果用户_widget==1:
request.data.user\u widget=True
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 202\u接受)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u REQUEST)
但是,您可能需要检查,看看某个通用视图是否符合视图的需要。通常这可以显著减少样板代码的数量。URL参数作为命名参数传递给方法(
get
,post
,put
,等等):
def put(self,request,pk,widget_id,format=None):
user\u id=self.request.query\u params.get('user\u id'))
user\u widget=PersonWidgetDefinition.objects.all()\
.filter(widget\u definition\u id=widget\u id,person\u id=user\u id).count()
如果用户_widget==0:
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 201\u已创建)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u请求)
如果用户_widget==1:
request.data.user\u widget=True
serializer=PersonWidgetDefinitionSerializer(数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data,status=status.HTTP\u 202\u接受)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u REQUEST)
但是,您可能需要检查,看看某个通用视图是否符合视图的需要。通常,这可以显著减少样板代码的数量
def put(self, request, pk, format=None):
widget_id = self.kwargs.get('widget_id')
user_id = self.request.query_params.get('user_id')
user_widget = PersonWidgetDefinition.objects.all()\
.filter(widget_definition_id=widget_id, person_id=user_id).count()
if user_widget == 0:
serializer = PersonWidgetDefinitionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
if user_widget == 1:
request.data.user_widget = True
serializer = PersonWidgetDefinitionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
path('widgets/<int:widget_id>/user/', UserWidgetView.as_view(), name='user-widget'),
TypeError at /api/v2/widgets/1/user/
put() got an unexpected keyword argument 'widget_id'
def put(self, request, pk, widget_id, format=None):
user_id = self.request.query_params.get('user_id')
user_widget = PersonWidgetDefinition.objects.all()\
.filter(widget_definition_id=widget_id, person_id=user_id).count()
if user_widget == 0:
serializer = PersonWidgetDefinitionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
if user_widget == 1:
request.data.user_widget = True
serializer = PersonWidgetDefinitionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)