python编程:从入门到实践学习笔记-基于Django框架的Web开发-用户账户(三)

第十九章 用户账户(三)

让用户拥有自己的数据

这部分我们将创建一个系统,确定各项数据所属的用户,再限制对页面的访问,让用户只能使用自己的数据。

修改模型Topic,让每个主题都归属特定用户。

使用@login_required限制访问

装饰器是放在函数定义前面的指令,python在函数运行前,根据它来修改函数代码的行为。

装饰器:让特定的页面只允许已登录的用户访问。

1.限制对topics页面的访问

修改learning_logs/views.py

加上装饰器之后,python会在运行的代码前先运行的代码。

会检查用户是否已登录,仅当用户已登录时,django才运行。如果用户未登录,则重定向到登录页面。

为实现重定向,修改settings.py,在文件末尾加上。现在未登录的用户会重定向到 LOGIN_URL 指定的URL。

2.全面限制对项目“学习笔记”的访问

现在,我们不限制对主页、注册、注销页面的访问,而限制对其他所有页面的访问。

在learning_logs/views.py中,除了意外,每个视图都加上 。

将数据关联到用户

修改模型Topic,添加一个关联到用户的外键。然后必须对数据库进行迁移。最后对部分视图进行修改,使其只显示与当前用户登录的相关联的数据。

1.修改模型Topic

修改learning_logs/models.py

2.确定当前有哪些用户

为了简单,我们将既有主题都关联到超级用户上,先确定超级用户的id,打开shell。

确定当前用户只有admin,id为1。(或者还有其他你自己创建的用户)

3.迁移数据库

获取id之后,迁移数据库。

首先执行命令后,django指出我们视图给既有模型Topic添加一个必不可少(不可为空)的字段(无默认值),并提供了两种选择:要么现在提供默认值,要么退出并在models.py中添加默认值。在这里我选了第一个选项,输入默认值,接着输入了用户id = 1。最后django使用这个值迁移数据库,在模型Topic中添加字段owner。

接下来执行迁移,执行命令。

只允许用户访问自己的主题

当前不管哪个用户登录,都能看到所有主题,现在我们让用户只能看到自己的主题。

修改learning_logs/views.py

用户登录后,request对象会有一个user属性,其存储了有关该用户的所有信息。 filter() 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。在这里我们用这个函数从数据库中只获取 owner 属性为当前用户的Topic对象。

保护用户的主题

在此之前,已登录的用户可输入URL来访问显示相应主题的页面。

为修复这种问题,,我们在视图函数获取请求的条目前执行检查。

渲染网页前检查该主题是否属于当前登录的用户,如果不是,则404。

保护页面edit_entry

接下来保护页面。修改views.py

将新主题关联到当前用户

当前,添加新主题的页面没有将新主题关联到特定用户。修改views.py

首先调用form.save(commit=False)是为了先修改新主题,暂时不提交到数据库中。接下来将新主题的 owner属性设置为当前用户后,最后在保存提交到数据库中。

现在这个项目允许任何人注册,而且每个用户可以添加任意数量的新主题。每个用户都只能访问自己的数据,无论是查看数据、输入新数据还是修改就数据都是如此。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418G01KYP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券