让用户拥有本身的数据web
用户应该有属于本身特定的数据,而且不能访问其余用户的数据shell
1.使用@login_required限制访问数据库
使用装饰器@login_required能够对于某些页面,只容许已登录的用户访问它们django
1>限制对topics页面的访问服务器
导入函数login_required()用于检查用户是否已经登录,仅当用户已登录时,Django才运行topics()的代码,若是用户未登陆,就重定向到登录界面app
为实现这种重定向,须要修改settings.py,让Django知道到哪里去查找登陆页面:函数
2>全面限制对web_app的访问ui
图片太大就不截了,这步的操做就是在视图文件views.py中的每个视图函数前面加上装饰器@login_required,达到对未登陆的用户对其限制访问的做用3d
2.将数据关联到用户orm
1>修改模型Topic
首先导入了django.contrib.auth中的模型User,而后在Topic中添加了字段owner,它创建到模型User的外键关系
2>肯定当前有哪些用户,并迁移数据库
迁移数据库时,Django将对数据库进行修改,使其可以存储主题和用户之间的关联。为执行迁移,Django须要知道将各个既有主题关联到哪一个用户。最简单的方法是,将既有主题都关联到同一个用户,例如超级用户,为此,咱们须要知道该用户的ID。
启动Django shell
迁移数据库
在红线处输入1表示将全部既有主题都关联管理用户Degelzhao。这里并不是必须使用超级用户,而可以使用已建立的任何用户的ID
3>验证迁移
如今每一个主题都属于Degelzhao的
3.只容许用户访问本身的主题
当前,无论以哪一个用户的身份登陆,都可以看到全部的主题,如今,咱们作一下修改,只向用户显示属于本身的主题
在views.py中,对函数topics()作以下修改
用户登陆后,request对象将有一个user属性,这个属性存储了有关该用户的信息。红线处表示让Django只从数据库中获取owner属性为当前用户的Topic对象
4.保护用户的主题
咱们如今尚未限制对显示单个主题的页面访问,所以任何已登陆的用户均可输入其余用户所拥有特定主题的URL,来访问相应主题的页面
接下来,咱们将修改函数topic()来消除这种问题
服务器上没有请求的资源时,标准的作法是返回404响应。咱们导入了异常Http404,并在用户请求它不能查看的主题时引起这个异常
5.保护页面edit_entry
相似于保护用户的主题,禁止用户经过输入相似于前面的URL来访问其余用户的条目
6.保护页面new_entry
当前的情况是一个用户可在另外一个用户的web_app中添加条目,接下来咱们来解决这个问题
7.将新主题关联到当前用户
当前,当你添加新主题后,会出现以下错误消息,指出web_app_topic.owner_id不能为NULL。意思就是建立新主题时,必须指定其owner字段的值
根据这个问题,接下来,咱们来修改函数new_topic()
1处表示调用form.save(),并传递实参commit=False,若是指定了该实参,那么save方法不会理解将表单数据存储到数据库,而是给你返回一个当前对象。这时你能够添加表单之外的额外数据,再一块儿存储
2处表示将新主题的owner属性设置为当前用户
3处表示对刚定义的主题实例进行存储
ps:网页操做就不一一列举了哈,你们能够根据个人教程到这一步了本身试下~