首页

6.3项目开发过程

关灯 护眼    字体:

上一章 章节列表 下一页


6.3.1 实现登录功能1:创建Redis的连接实例


1.登录过程的逻辑原理

(1)用户输入昵称并单击“登录”按钮。

(2)网站在Redis集合中检查昵称是否存在:

● 如果昵称存在,则提示用户昵称已称存在,不能登录。

● 如果昵称不存在,则把昵称添加到集合中,防止其他人再使用这个昵称。

(3)基于昵称与当前时间戳生成Token。

(4)把昵称与Token保存到Redis中,以便再次查询。

(5)把昵称与Token设置到浏览器Cookies中,以便今后进入聊天界面时免去登录过程。

2.具体实现过程

要使用Redis,首先需要创建Redis的连接实例。把创建连接实例的代码写在__init__()方法中,以便在整个RedisUtil类中进行调用。

修改RedisUtil类的__init__()方法,连接本地到Redis,见代码6-1。

代码6-1 初始化Redis连接实例

其中,主要代码说明如下。

● 第2~4行代码:初始化一些固定的字符串,这些字符串将要作为Redis的Key使用。

● 第7行代码:连接本地Redis。

修改后的代码如图6-10所示。

图6-10 连接本地Redis



6.3.2 实现登录功能2:实现“检查昵称是否重复”功能


要检查昵称是否重复,则用到的是Redis的“集合”这个数据结构。

向集合中添加一条内容:

● 如果返回1,则表示这条内容原来不在集合中。

● 如果返回0,则表示集合里面已经有这条内容了。

1.实现“判断昵称是否重复”的方法

根据is_nick_already_exists()方法注释的提示,完善这个方法。见代码6-2。

代码6-2 使用Redis集合判断昵称是否重复

其中,主要代码说明如下:

● 第12行,调用集合的“sad”命令,把昵称添加到Key为self.chat_room_nick_set这个属性值的集合中。

● 第13~15行,判断Redis返回的数字。如果返回数字为1,则表示原来集合没有这个昵称,此时这个方法需要返回 False;如果返回的数字不是1,则说明原来已经有这个昵称了,这个方法就会返回True。

修改完成的代码如图6-11所示。

图6-11 修改is_nick_already_exists方法

2.测试“昵称判重”功能

修改完成后,重启网站,再次尝试登录。

可以发现,验证昵称是否重复的功能已经正常。不会再出现输入任何昵称都提示昵称已经存在的问题了。但问题是,即使输入一个全新的昵称,网站也不会进入聊天室页面,而是闪一下后继续留在登录页面。



6.3.3 实现登录功能3:实现“设置和获取Token”功能


所谓Token,本质上就是一段用来验证身份的字符串。

在本项目中,Token是昵称加上当前时间戳并转换为MD5后的值。

设置与获取 Token 对应的是 set_token()方法和 get_token()方法。这两个方法本质上就是在Redis添加字符串和读取字符串。

保存Token的字符串,Key为“cookie-昵称”(例如“cookie-王小一”),字符串的值为Token,每一个昵称对应一个字符串。

1.实现设置Token的方法

修改set_token()方法后的代码如下:

代码6-3 使用Redis字符串记录Token信息



其中,主要代码说明如下。

● 第11行代码:拼接出完整的字符串Key。

● 第12行代码:在Redis中设置Key和对应的Token。

2.实现获取Token的方法

修改get_token方法后的代码如下:

代码6-4 从Redis中读取Token信息

其中,主要代码说明如下。

● 第12行代码:拼出这个昵称对应的字符串Key。

● 第13行代码:从Redis中读取这个Key的值。

● 第14行代码:如果这个Key不存在,则返回None;如果Key存在,则把Key对应的bytes型的数据解码为字符串后返回。

修改后的代码如图6-12所示。

图6-12 修改set_token()方法和get_token()方法

3.测试登录功能

修改完成后,重启网站,再次尝试使用新的名字登录,发现已经可以正常进入聊天室页面了,如图6-13所示。

图6-13 成功登录聊天室页面

但是聊天窗口始终没有任何信息显示,发送信息也没有效果。

提示:

为什么需要Token?

网页基于HTTP协议,而HTTP协议是没有状态的。什么叫作没有状态?就是某个用户访问了两个页面,但是网站并不知道这两次访问来自同一个人。该用户访问登录页面是一次请求,访问聊天室页面是另一个请求,网站怎么知道访问聊天室的这个人就是刚刚登录的那个人呢?

为了让这种“没有状态”变得“有状态”,就引入了一个叫作Cookies的东西。Cookies本质上是一小段文本信息,浏览器发送每一个请求都带上这段文本信息,于是网站看到两次请求都有相同的Cookies,就知道这两次请求来自同一个人。

例如,一个用户用昵称“青南”进行登录,网站收到这个登录请求后,就给这个浏览器返回一段Cookies:“这个人是青南”。然后,浏览器每次访问这个网站的其他页面都会带上这一段话。当这个用户访问聊天室页面时,网站
m.qiduwx.com提示您,本章没有阅读完,点击下一页进入下一页阅读!

上一章 章节列表 下一页