添加到 django request.user 变量

q3d*_*q3d 2 python authentication django

在django中,我使用authenticate()函数来登录用户。使用request.user,我可以访问从用户表中提取的登录用户的信息。如果我这样做request.user.id,我可以获得用户的ID。在任何模板中,根据任何请求,我都可以user.username获取用户名。

有没有一种方法可以将值添加到request.user变量中,以便我可以在整个应用程序和模板中使用它们?

例如,我想这样:request.user.timezone当用户登录网站时设置;我应该能够在模板和我的视图中访问此变量。

Tis*_*sho 5

您可以编写一个简单的中间件:

class UserTZMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        if request.user.is_authenticated():
            request.user.timezone = evaluate_tz()
Run Code Online (Sandbox Code Playgroud)

然后将其附加到MIDDLEWARE_CLASSES您的settings.py文件中:

MIDDLEWARE_CLASSES = (
    ....,
    'myapp.UserTZMiddleware',
)
Run Code Online (Sandbox Code Playgroud)