不要克服在另一个函数中调用函数



我正在使用django 1.11,我想在另一个函数中调用一个小函数。 问题来自被调用函数内的参数。

该函数允许从登录用户获取电子邮件:

def get_user_email(request):
user_email = request.user.email
return user_email

另一个做了一些事情,但我需要拿起电子邮件:

@shared_task(bind=True, time_limit=3600, soft_time_limit=3600)
def get_xls_export(self, model="", search_info="", query_params=None, **kwargs):
# Some things
# Call the previous function
user_email = get_user_email()

我必须在函数中写入哪些属性才能正确调用它?

谢谢

简短的回答:你不能这样做。

更长的答案:在(完全无用的 FWIW)get_user_email()函数中,request应该是当前的HTTPRequest实例,当然只能在视图中使用。要在芹菜任务中使用它,您需要将request对象从视图传递到任务,但这也是一个坏主意(它会将您的任务代码与很多它不需要并且没有业务知道的东西耦合,这将使测试变得更加困难, 它甚至可能暴露敏感数据),如果这实际上是可能的(不确定 Django 的HTTPRequest如何支持序列化)。

此处的正确解决方案是强制调用方显式传递任务所需的信息,并且仅传递这些信息。在您的情况下,根据您使用用户电子邮件的目的以及是否可以拥有可能过时的数据,您希望传递纯电子邮件,或者传递用户的id并从任务中重新读取模型(这可确保电子邮件在执行任务时是最新的)。

实际上,这个get_user_email函数(当然,如果您发布的是完整的实现)是无用的,并且比良好的 wrt/可读性危害更大。

相关内容

  • 没有找到相关文章

最新更新