django如何知道哪个用户拥有哪些数据?

时间:2017-06-04 20:06:53

标签: python django

例如,如果我想为所有用户显示零(0),我希望所有用户在数字中添加一(1)只为超级用户显示他们的身份。以及如何确保每个用户只能添加一次,当然还有什么安全要求必须要做以防止非自动化访问更改任何此类或获取任何信息?

我理解这是一个很大的话题,但是有人可以简单地向我解释一下编程的哪些部分,以及关于这些主题的一些好书?

1 个答案:

答案 0 :(得分:4)

网络是无国籍的。这意味着如果浏览器两次请求同一页面,传统的Web服务器就无法确定它是否是同一个用户。

输入会话。 Django有一个身份验证系统,需要每个用户登录。当用户登录时,他们会得到一个会话。会议由两部分组成;包含随机生成的令牌的cookie,以及具有相同令牌的数据库条目。

当用户登录时,会生成一个新的会话令牌,并通过cookie将其发送回浏览器存储的用户。同时,该记录在数据库中创建。每次浏览器向Django发出请求时,它都会发送会话cookie以及请求,Django会将其与数据库中的令牌进行比较。如果令牌存在,则认为用户已登录。如果令牌不存在,则用户未登录。

在Django中,有一些用户模型可以让您轻松查看当前登录用户的每个请求。他们在每个用户提出的每个请求中为我们做背景中的所有令牌检查。有了这个,我们可以通过“外键”关系关联其他模型,以表明谁拥有什么。

假设您正在创建一个多个用户可以撰写文章的博客。如果您想构建一个编辑功能,您可能希望限制用户只允许编辑他们自己的文章和其他任何人。在这种情况下,您将收到请求,找出当前用户的来源,将该用户与博客Post模型上的“author”字段进行比较,并查看该外键是否匹配。如果匹配,则发出当前请求的用户是所有者,并且允许编辑。

通过会话令牌是随机生成的哈希值而不是简单的ID号这一事实来保证整个过程。恶意攻击者不能简单地获取哈希值并递增值以尝试访问相邻帐户,他们必须完全拦截另一个用户的哈希值。使用SSL证书可以进一步保护这一点,以便您的连接超过https://,并且所有流量都在浏览器和服务器之间进行加密。