Django:重新编码请求并调用另一个视图
Django: reencode request and call another view
我正在开发一个公开 JSON-based REST api 的后端应用程序。但是,我正在使用一些具有自己的一些端点的库,它们接受 form-endcoded 数据。我想扩展这些端点完成的操作并公开我的扩展版本。同时,我希望我的 API 保持一致,并且我希望我所有的端点都使用 JSON。更具体地说,我使用 oauth2_provider 库,我想在用户撤销令牌时注销用户。我也在考虑制作一个 logout
句柄,它需要 Authorization
header 中的承载令牌,并且会注销用户并撤销令牌。
我的第一个方法是围绕 oauth2_toolkit
撤销令牌视图编写包装视图,在包装视图中将用户注销,然后调用实际的 revoke_token 视图。但是,我必须修改请求的body,它是不可变的。
class Logout(View):
def get(self, request):
if request.user.is_authenticated:
logout(request)
# modify the .body attr of the request or create a new request here
RevokeTokenView.as_view(request)
我找不到克隆或修改 Django 请求的方法。有办法吗?
(现在我正在考虑创建自定义 oauthlib_backend_class,但感觉有点矫枉过正)
UPD: revoke_token
视图需要的数据在request_body
您可以像下面这样修改不可变请求体:
class Logout(View):
def get(self, request):
if request.user.is_authenticated:
logout(request)
# modify or create a new request here
body = request.GET.copy()
body['key'] = 'new_value'
request.GET = body
RevokeTokenView.as_view(request)
更新:如果你想改变请求对象的.body
属性,根据django's implementation,你应该改变._body
request
对象的私有属性。
我正在开发一个公开 JSON-based REST api 的后端应用程序。但是,我正在使用一些具有自己的一些端点的库,它们接受 form-endcoded 数据。我想扩展这些端点完成的操作并公开我的扩展版本。同时,我希望我的 API 保持一致,并且我希望我所有的端点都使用 JSON。更具体地说,我使用 oauth2_provider 库,我想在用户撤销令牌时注销用户。我也在考虑制作一个 logout
句柄,它需要 Authorization
header 中的承载令牌,并且会注销用户并撤销令牌。
我的第一个方法是围绕 oauth2_toolkit
撤销令牌视图编写包装视图,在包装视图中将用户注销,然后调用实际的 revoke_token 视图。但是,我必须修改请求的body,它是不可变的。
class Logout(View):
def get(self, request):
if request.user.is_authenticated:
logout(request)
# modify the .body attr of the request or create a new request here
RevokeTokenView.as_view(request)
我找不到克隆或修改 Django 请求的方法。有办法吗? (现在我正在考虑创建自定义 oauthlib_backend_class,但感觉有点矫枉过正)
UPD: revoke_token
视图需要的数据在request_body
您可以像下面这样修改不可变请求体:
class Logout(View):
def get(self, request):
if request.user.is_authenticated:
logout(request)
# modify or create a new request here
body = request.GET.copy()
body['key'] = 'new_value'
request.GET = body
RevokeTokenView.as_view(request)
更新:如果你想改变请求对象的.body
属性,根据django's implementation,你应该改变._body
request
对象的私有属性。