gpt4 book ai didi

用于使变量广泛可用的 Django 选项

转载 作者:行者123 更新时间:2023-12-02 06:53:41 25 4
gpt4 key购买 nike

每次打开页面时,我都想获取当前事件的项目 ID。这将通过检查子域并验证当前登录的用户是否可以查看它来完成。

一旦我达到我的观点,我希望能够做到

tasks = Task.objects.filter(project = current_project)

其中 current_project(或 CURRENT_PROJECT 或 current_project ???)已设置。

任何人都可以解释我在文档中找到的各种方法的优缺点,并让我走上正确的道路吗?

  1. session
  2. 中间件
  3. 线程化
  4. 内置函数

我最终就是这样做的:

装饰器:

def check4project(fn):

current_project = 'fred'
def check(*args, **kw):
kw['project']=current_project
return fn(*args, **kw)
return check

查看示例

@login_required
@check4project
@tweetpost
def index(request, project=0):

print project

最佳答案

这完全取决于“当前项目”的语义是什么。以下是一些可能性:

  1. 这可能是用户的一个特征:他访问他的个人资料页面并设置当前项目。这将存储在数据库中,您可以使用 ORM 访问它。

  2. 它可能是 URL 的一个特征,仅基于子域。这可以通过中间件来完成,中间件可以访问请求,例如可以解析主机名并在请求上设置可以在 View 函数中访问的自定义属性。

  3. 与#2类似,如果检查项目是针对某些 View 而不是全部 View ,则可以使用 View 装饰器。这类似于 Django 用于检查授权的装饰器。

  4. 这可能是用户访问该网站的一个特征:他访问一个项目页面,选择一个项目进行工作,并且该页面会一直粘着,直到他选择另一个项目。最好将其存储在 session 中,该 session 专门用于此类临时存储。

根据您的描述,听起来 #2 或 #3 最适合您,具体取决于您的观点如何在关心子项目和不关心子项目之间划分。

关于用于使变量广泛可用的 Django 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1417405/

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