在查看了更多资源后,我能够弄清楚我们如何使用prepend_url
. 所以,我只想写对我有用的东西,并希望它对其他人也有用。
这就是我的UserResource
样子。
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
def prepend_urls(self):
Return [
url(r"^(?P<resource_name>%s)/(?P<user_id>\w[\w/-]*)/upvote%s$" %
(Self. _meta. resource_name, trailing_slash ()),
self.wrap_view('upvote_user'), name="api_user_upvote"),
]
def upvote_user(self, request, **kwargs):
self.method_check(request, allowed=['get'])
self.is_authenticated(request)
self.throttle_check(request)
try:
basic_bundle = self.build_bundle(request=request)
obj = self.cached_obj_get(bundle=basic_bundle,
**self.remove_api_resource_names(kwargs))
except ObjectDoesNotExist:
return HttpGone()
except MultipleObjectsReturned:
return HttpMultipleChoices("More than one resource is found at this URI.")
user_manager_obj = UserManager()
return self.create_response(request, user_manager_obj.upvote_user(obj.user_id))
并在我的UserManager
课堂上又写了一种方法来对User
模型执行投票操作。
def upvote_user(self, user_id):
try:
user = User.objects.get(id=user_id)
user.user_rating += 1
user.save()
except:
# Handle Exception
return False
return True
这显示了我们如何prepend_url
在使用模型保存数据之前修改数据,我认为它比这更强大。请分享如果您认为有任何更好的解决方案可以实现相同的目标。
谢谢