Pycharm上Django的使用 Day12

让用户拥有自己的数据

用户应该有属于自己特定的数据,并且不能访问其他用户的数据

1.使用@login_required限制访问

使用装饰器@login_required可以对于某些页面,只允许已登陆的用户访问它们

1>限制对topics页面的访问

导入函数login_required()用于检查用户是否已经登陆,仅当用户已登陆时,Django才运行topics()的代码,如果用户未登录,就重定向到登陆界面

为实现这种重定向,需要修改settings.py,让Django知道到哪里去查找登录页面:

2>全面限制对web_app的访问

图片太大就不截了,这步的操作就是在视图文件views.py中的每一个视图函数前面加上装饰器@login_required,达到对未登录的用户对其限制访问的作用

扫描二维码关注公众号,回复: 4289825 查看本文章

2.将数据关联到用户

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:网页操作就不一一列举了哈,大家可以根据我的教程到这一步了自己试下~

猜你喜欢

转载自my.oschina.net/u/4011629/blog/2963054
今日推荐