cookie在flask中的应用、flask-login模块的使用(login_user、@login_required、@login_manager.user_loader)current_user

1、什么是用户登录

票据有两层意思:

  • 如果用户持有票据 ,我们就认为用户的身份是合法的
  • 我们可以根据票据知道当前用户到底是谁

和身份证的意义是一样的,有身份证才说明你是合法公民,我们也就能知道你到底是谁。

身份证都有一个有效期,那么这个票据也需要有一个有效期

2、服务器用什么样的机制把票据返回到客户端上去,并存储在客户端里的呢?

对于我们的网站而言,服务器是将我们的票据信息写入到cookie中,并且把cookie返回到浏览器中存储起来。

3、什么是cookie

有时候,我们服务器会生成多个key-value就像我们的字典一样,这些key-value会随着我们的响应(也就是response)返回到我们的浏览器里面去,然后浏览器会把这些key-value存储起来,那么这些被浏览器存储起来的键值对呢,就叫做cookie,当然cookie并不是简单的一组key-value键值对,他还有他的相关特性。

重要的特性:

  • cookie失效:我们可以在服务器给cookie设置一个有效期,一旦超过了这个有效期,浏览器就不会在保存这样的cookie了。
  • 如果说一个浏览器,它存储由某一个网站写入到浏览器中的cookie的话,那么下一次只要我们再次通过浏览器发送这个请求访问网站,那么这次请求的信息中呢,将再次携带这个cookie,但前提条件是呢,cookie是没有失效的。

4、在flask中向浏览器写入cookie

make_response产生一个响应对象,然后调用response的set_cookie方法把键name值MR.7写入到cookie中并附加一个有效期,单位是秒,这里是100秒。也就是说这个cookie在浏览器中只会存储100秒,超过100秒这个cookie就失效了。最后我们把response对象返回到我们的客户端上去。

注意这里的过期时间是比我们的北京时间少8个小时的。在加上8个小时才是我们的北京时间。

5、cookie在什么情况下会失效

在两种情况下:

  • 设置了有效期,那么超过了这个有效期之后cookie就没有了
  • 如果我们不设置这个有效期的话,那么这个cookie是一次性的(一般浏览器关闭了之后这个cookie就消失了)

6、cookie的应用

  • 利用cookie来做用户登录之后票据的保存。
  • 现在用的最多的还是用来做广告的精准投放

简单说一下广告的精准投放

为什么推荐的是家电呢?是因为之前在京东买了电饭煲,京东就会通过cookie来记录我的偏好行为。

因为我们说过cookie机制,是保存在浏览器当中的,那么下一次只要再次通过这个浏览器去访问网站的话,那么cookie是会发向我们的服务器去的。所以记录了我喜欢电饭煲或者是家电的这样的cookie呢就发向了腾讯视频。那么腾讯视频得到了这个信息之后就会像我展现1号店的家电广告。

这里你们会发现一个很有意思的事,我是通过jd来买的电饭煲,那么这个cookie的写入是由jd写入的,那么为什么我在看腾讯视频的时候,腾讯视频知道我喜欢电饭煲呢?那么cookie本来的机制是哪个网站写入的cookie哪个网站才能获取这个cookie,那么腾讯是如果获取到京东的cookie的呢?如果我们自己做了一个网站,我们是拿不到jd的cookie的。更有意思的是这里投放的是1号店的,相当于1号店使用了jd的数据。现在的1号店和腾讯还有jd可以算是一家了。腾讯自己的电商做的不好,所以入股了jd,而jd收购了1号店,既然是一家,那么就好办了。有很多技术可以实现跨站cookie共享。下面可以看到我们有jd的cookie。


7、flask-login的使用

当用户登录成功之后我们要产生一个票据,并且把这个票据写入cookie中,我们不仅负责写入票据还要负责读取票据,并且要管理这个票据,整个的登陆机制是非常繁琐的,所以我们自己去用cookie实现这一整套的管理机制是非常不明智的,很幸运的是flask给我们提供了插件flask-login,可以完全用这个插件来管理登陆信息。

首先安装插件

导入插件

7.1、实例化LoginManager并初始化LoginManager

就如同我们之前的sqlalchemy的db的创建实例及初始化一样。写如下图红框所示的代码。

如果用户的身份验证通过,我们如何来保存用户的票据呢?

保存用户的票据信息需要我们从flask_login中导入另外的一个函数就是login_user

7.2、login_user模块

然后我们就需要把我们从数据库中查询到的user模型当做参数传入login_user中

下面我们需要了解一下login_user的一些机制

用户登录的实质是要向cookie中写入这样的票据。

我们在这里并不会直接的操作cookie,而是通过login_user间接的把用户票据写入到cookie中

login_user是一个高度封装的函数,但是它的实质依然是把用户的票据写入到cookie中。

这里我们需要考虑一下票据到底是什么东西,我们往cookie中写入的又是什么东西。

看上面代码我们知道我们往login_user中传入了一个我们自己定义的用户模型,那么是不是说login_user把我们用户模型中的所有数据全部都写入到了cookie中了呢?这个并不现实,因为user模型是我们自己定义的,可能数据非常的多,其中一些信息是根本不需要写入到cookie中的,那么最关键最应该写入到cookie中的是什么呢?是我们用户的id号,因为id号才能代表用户的身份。

那么问题来了,login_user这个函数他如何知道我们自己定义的user模型下面的这么多的数据哪一个是代表用户身份信息的id号呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值