【问题标题】:Create Django sessions创建 Django 会话
【发布时间】:2018-09-10 13:52:45
【问题描述】:

我目前遇到一个问题,在我的网络应用程序中,如果 2 个用户登录然后每个人都想进行操作(例如添加评论),这 2 条评论将在数据库中显示为来自同一个人(最后登录的用户)。我已经记录并知道必须进行会话,但我无法弄清楚如何。从找到的示例中,我了解到需要类似的东西

user = authenticate(username=username, password=password)

if user is not None:
    login(request, user)
    request.session['username'] = username
    return redirect('index')
else:
    return render(request, 'library/login.html')

如果我想始终向所有用户打印用户名,然后在配置文件中,将显示最后登录用户

class Profil(View):
    template_name = 'library/profile.html'

    def get(self, request):
        print(request.session['username'])
        # the rest of the code

谁能向我解释我哪里错了,我该如何纠正?举个例子就完美了。

P.S.:如果您认为这是一个愚蠢的问题,请提前道歉。

【问题讨论】:

  • 这与会话无关。为什么你认为它会?相反,您应该向我们展示保存评论并将其与用户关联的代码。
  • 以上代码仅用于测试。假设同时登录了 3 个用户(A、B 和 C),当每个用户访问 profile.html 时,我只想打印他的用户名。我希望看到每个用户的名称(A、B、C),但打印 C、C、C,因为 C 是 最后一个登录的用户。不知何故覆盖了其他帐户,因为如果我刷新 A 的页面,C 的帐户就会出现。
  • 不,这不会发生,因为这不是会话所做的。但是正如我所说的,这里不需要使用会话,您应该显示相关代码。
  • 我只需要在这个小例子中了解在访问 profile.html 和刷新页面时我必须做什么来显示每个用户的用户名(A、B 和 C)
  • 好的,假设我想要关于de用户的信息,如果我刷新A的页面会出现C的信息。以c.execute("SELECT first_name, last_name, age from users where username=%s", [username]) 为例

标签: python django session


【解决方案1】:

您不需要显式定义会话,您可以通过“request.user.username”轻松获取用户名,并且在您的评论模型中,您可以添加用户表的外键来指示哪个用户正在添加评论。

【讨论】:

  • 感谢您的回答,但不幸的是使用 request.user.username 有同样奇怪的行为:登录并在页面上显示他的信息(姓名)然后 B 登录并在页面上显示他的信息也;现在很奇怪,如果A刷新他的页面B的信息会出现在页面上(request.user.username应该不是问题,它给了我用户名,但它给了B的用户名)
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2011-05-02
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多