python - 使用中间件在每个视图之前调用的自定义装饰器
问题描述
我在一个文件中有一个自定义装饰器,我需要每个 API 都调用这个装饰器。我不想@decorator_name
在每个视图之前都写。我认为这可以使用中间件来完成,但我不知道该怎么做。
我试过这样的中间件
class DefaultAccountMiddleware(MiddlewareMixin):
def process_view(self, request, view_func, view_args, view_kwargs):
return update_latest_account(view_func)(self, request, *view_args, **view_kwargs)
这是装饰器:
def update_latest_account(f):
@wraps(f)
def decorator(self, request, *args, **kwargs):
user_id = request.user.id
print('hi')
user = User.objects.filter(id = user_id).first()
if user is not None:
account_id = request.META.get("HTTP_ACCOUNT_ID", None)
user.latest_account_id = account_id
user.save()
return f(self, request, *args, **kwargs)
return decorator
解决方案
推荐阅读
- excel - 调试错误 438 Excel VBA 从一个工作簿复制到另一个工作簿
- react-native - 如何在 12/2018 之后使用 gradle 进行安全升级?
- r - 汇总和丢弃分组变量
- uwp - 我可以在非 UWP 应用程序中使用 C++/WinRT 吗?
- javascript - 在提交电子邮件验证错误时停止 Mailchimp 自定义表单重定向
- python - 使用 raw_input 检索字典数据
- azure - Azure 数据工厂管道不同的执行时间
- swift - 具有动态背景颜色的 Xcode 静态单元格
- codeblocks - 未定义的对 `vtable for boost::detail::thread_data_base' 的引用
- node.js - (Apollo) GraphQL 合并模式