gpt4 book ai didi

python - 可以在 Django View 中使用 Python 生成器吗?

转载 作者:行者123 更新时间:2023-12-05 02:22:49 25 4
gpt4 key购买 nike

问题:

本质上,我想在每次调用 View 时从数据库返回一个唯一的结果(直到我用完唯一的对象并且必须重新开始)。我在想一个简单而优雅的解决方案是使用生成器来处理这个问题。这是否可能?如果可能,如何从 ORM 中提取值?

注意事项:

我认为 session 或使用像 Memento 这样的设计模式可能是这里的解决方案,但我真的很好奇是否以及如何在这种情况下使用 Python 生成器。

最佳答案

由于 Django 是同步 wsgi,您必须单独处理每个请求,您的 python 环境随时可能被终止或切换到另一个环境。

不过,如果您没有恐惧并且只有一个进程,您可以制作一个文件范围字典,其中包含您每次都会使用的 session ID 和迭代器

from django.shortcuts import render
from collections import defaultdict
import uuid

def iterator():
for item in DatabaseTable.objects.all():
yield item

sessions_current_iterators = defaultdict(iterator)

def my_view(request):
id = request.session.get("iterator_id", None)
if id is None:
request.session["iterator_id"] = str(uuid.uuid4())
try:
return render(request, "item_template.html", {"item": next(sessions_current_iterators)}
except StopIteration:
request.session.pop("iterator_id")
return render(request, "end_template.html", {})

但是:切勿在生产环境中使用它!

生成器非常适合在计算请求时减少内存消耗,或者对 tornado 网络服务有好处,但显然,django 不应该在局部变量中的请求之间共享数据。

关于python - 可以在 Django View 中使用 Python 生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com