Python:Tornado 第二章:实战演练:开发Tornado网站:第八节:用户身份认证

news/2024/4/28 3:31:28/文章来源:https://blog.csdn.net/weixin_34128534/article/details/88730216
上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第七节:安全Cookie机制
下一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第九节:防止跨站攻击

在Tornado的RequestHandler类中有一个current_user属性用于保存当前请求的用户名。RequestHandler.get_current_user的默认值是None,在get()、post()等处理函数中可以随时读取该属性以获取当前的用户名。RequestHandler.current_user是一个只读属性,所以如果想要设置该属性值,需要重载RequestHandler.get_current_user()函数以设置该属性值。

实例:使用RequestHandler.current_user属性及RequestHandler.get_current_user()方法来实现用户身份控制。

代码:

import tornado.web
import tornado.ioloop
import uuid  #UUID 生成库dict_sessions={}  #保存所有登录的Sessionclass BaseHandler(tornado.web.RequestHandler):  #公共基类#写入current_user的函数def get_current_user(self):session_id=self.get_secure_cookie("session_id")return dict_sessions.get(session_id)class MainHandler(BaseHandler):@tornado.web.authenticated    #需要身份认证才能访问的处理器def get(self):name=tornado.escape.xhtml_escape(self.current_user)self.write("Hello,"+name)class LoginHandler(BaseHandler):def get(self):   #登陆页面self.write('<html><>body''<form action="/login" method="post">''Name:<input type="text" name="name">''<input type="submit" value="Sign in">''</form></body></html>')def post(self):  #验证是否运行登陆if len(self.get_argument("name"))<3:self.redirect("/login")session_id=str(uuid.uuid1())dict_sessions[session_id]=self.get_argument("name")self.set_secure_cookie("session_id",session_id)self.redirect("/")
setting={"cookie_secret":"SECRET_DONT_LEAK", #Cookie加密秘钥"login_url":"/login"  #定义登陆页面
}
application=tornado.web.Application([(r"/",MainHandler),        #URL映射定义(r"/login",LoginHandler)
],**setting)def main():application.listen(8888)tornado.ioloop.IOLoop.current().start()     #挂起监听if __name__ == '__main__':main()

本例演示了一个完整的身份认证编程框架,整体构思如下:

  • 用全局字典dict_sessions保存已经登录的用户信息,为了简单些,本例只保存了【回话ID:用户名】的键值对。
  • 定义公共基类BaseHandler,该类继承自tornado.web.RequestHandler,用于定义本网站所有处理器的公共属性和行为。重载它的get_current_user()函数,其在访问RequestHandler.current_user属性时自动被Tornado调用。该函数首先用get_secure_cookie()获得本次访问的回话ID,然后利用该ID从dict_sessions中获得用户名并且返回。
  • MainHandler类是一个要求用户经过身份认证才能访问的处理器实例。该处理器中的处理函数get()使用了装饰器tornado.web.authenticated,具有该装饰器的处理函数在执行之前根据current_user是否已经被赋值来判断用户的身份认证情况,如果已经被赋值则可以进行正常逻辑,否则自动重定向到网站的登录页面。
  • LoginHandler类是登录页面处理器,其get()函数用于渲染登录页面,post()函数用于验证是否允许用户登陆。
  • 在tornado.web.Application的初始化函数中通过login_url参数给出网站的登陆页面地址。该地址被用于tornado.web.authenticated装饰器在发现用户尚未验证时重定向到一个URL。
注意:加入身份认证的所有页面处理器需要继承自BaseHandler类,而不是直接继承原来的tornado.web.RequestHandler类。

商用的身份认证还要完善更多的内容,比如加入密码验证机制、管理登陆超时、将用户信息保存到数据库等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_826659.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商网站架构探索|SOA分布式架构详解

目前很多的企业都有自己的电商网站&#xff0c;但随着业务量的增长&#xff0c;并发量高了。由于平台架构的一些不足&#xff0c;会导致一系列严重的问题&#xff0c;电子商务平台的安全性&#xff0c;承受能力也经受着严峻的考验&#xff0c;而市面上绝大多数的电商网站是业务…

百度关键词模拟发包php程序,PHP可视化百度小程序平台微信狗源码OEM招商加盟版(多套网站风格模板+一键搭建)...

【温馨提示】源码包解压密码&#xff1a;www.youhutong.com资源描述PHP可视化百度小程序平台微信狗源码OEM招商加盟版(多套网站风格模板一键搭建)源码介绍&#xff1a;它拥有以下几个特点&#xff1a;1、系统终身使用&#xff0c;可以生成无数小程序&#xff1b;2、自带多种行业…

log4j mysql 详细日志_log4j将日志存储到数据库_太平洋学习网|一个最全的javaweb,js,css,html5,csdn,android,linux的学习网站。...

log4j是javaEE日志输出文件&#xff0c;通常情况下我们都是把log日志输出到指定的日志文件中&#xff0c;在这儿我们使用log4j将日志存储到mysql&#xff0c;oracle数据库表中&#xff0c;使用log4j前必须引入log4j.jar 和commons-logging.jar这两个jar包。一&#xff1a;配置l…

获取手机号_网站获取手机号的方法

很多人疑惑网站和app中的手机电话号码数据是怎么抓取的&#xff0c;是如何实现的&#xff0c;我在这里说下。一、数据的来源现在数据的来源有很多种&#xff0c;我给大家说下常见的几种数据来源方式和抓取方式。1、运营商数据&#xff0c;这种来源方式的话是运营商会有一个http…

WebMatrixRazor建站系列之WebMatrix介绍

WebMatrix介绍 WebMatrix是微软开发的一个免费的&#xff0c;轻量级Web开发工具。提供了一种简单的方式让我们创建一个站点。它包括IIS Express&#xff08;Web服务器&#xff09;&#xff0c;ASP.NET&#xff08;Web框架&#xff09;&#xff0c;和SQL Server Compact&#xf…

如何扫描网站的php文件在哪里,PHP实现的网站目录扫描索引工具

代码很简单&#xff0c;这里就不多废话了&#xff0c;本代码来至一位网友的投稿&#xff0c;经测试可用error_reporting(E_ALL & ~E_NOTICE);ignore_user_abort();set_time_limit(0);if ($_GET[act] op) {$data_url $_GET[url] . /;$hz $_GET[type];list($fw1, $fw2) e…

为您的IIS6下的网站配置Rewrite伪静态组件

首先我们下载Rewrite伪静态组件到服务器&#xff0c;点击下载&#xff0c;然后解压到D:\Rewrite下&#xff0c;解压后如下图&#xff1a; 温馨提示&#xff1a;ReWrite组件所在目录要有Users或者Everyone默认访问权限。您可以点击该目录右键&#xff0c;属性&#xff0c;安全&a…

超实用的54套ASP网站设计源码

2019独角兽企业重金招聘Python工程师标准>>> ASP是一种服务器端脚本编写环境&#xff0c;可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容。以下是则会54套ASP网站设计源码…

网站相关技术探究keepalive_timeout:

网站相关技术探究keepalive设多少&#xff1a; /proc/$PID/fd/$number0:标准输入 1:标准输出2:标准错误Test:[rootKTQT ~]# ll /proc/12857/fdtotal 0 lrwx------ 1 root root 64 Apr 4 17:49 0 -> /dev/nulllrwx------ 1 root root 64 Apr 4 17:49 1 -> /dev/nulllrwx…

Google的网站统计、分析系统

http://www.google.com/analytics/功能全&#xff0c;比较酷&#xff01;转载于:https://www.cnblogs.com/huobazi/archive/2005/11/16/277830.html

SharePoint Server 2013 Step By Step之管理网站导航

管理网站导航SharePoint网站导航包括两个区域的导航选项&#xff0c;快速启动和导航栏。默认情况下&#xff0c;快速启动位于网站内容的左侧&#xff0c;通常用于列出当前站点&#xff1a;如列表、类别&#xff0c;库&#xff0c;子网站等等。而导航栏&#xff0c;默认情况下&a…

ZT 如何使XP自动启动IIS默认网站

如何使XP自动启动IIS默认网站 [转贴 2007-08-27 21:33:24 ] 发表者: yl_wen 在服务里&#xff0c;把下面两个服务设置为自动即可&#xff1a; 1. IIS Admin 2. World Wide Web Publishing分类: 系统维护 转载于:https://www.cnblogs.com/Jasper-Wang/article…

如何通过添加链接让子网站显示在主页

进入“网站目录”网站&#xff0c;点击“创建网站”&#xff0c;添加一个子网站 在新建网站页面&#xff0c;输入网站的标题和URL&#xff0c;这里输入“test” 下面的权限、导航保持默认。网站类别也不做任何选择。 网站创建成功后&#xff0c;我们只能在网站地图里面看到相关…

以网站群的模式实现信息资源落地

2019独角兽企业重金招聘Python工程师标准>>> 一.为何以网站群模式实现信息资源落地&#xff1a; 聚合企业各种网络资源&#xff0c;实现互联互通和协同共享&#xff0c;提高企业资源配置效率和管理水平的能力。 1.技术资源融合 按照主流的技术路线&#xff0c;统一规…

百度seo指南_百度小程序实践项目-seo指南(一)

第一章、智能小程序建设如何对搜索友好一、页面结构要求1、页面结构清晰、各模块划分清晰。2、分类划分明确&#xff0c;设置醒目&#xff0c;分类主题的文章对应发布到相应分类下。3、Web化url结构清晰&#xff0c;易提炼成正则规则&#xff0c;如果有对应H5网站&#xff0c;建…

简易的旅游网页制作_网站制作——css标记语言

对于网页设计而言&#xff0c;html语言就像是画板&#xff0c;让你尽情施展操作&#xff1b;css就像是一支画笔&#xff0c;可以勾勒出优美的画面&#xff0c;它可以根据设计者的要求对网页的布局、颜色、字体、背景和其他图文效果进行控制&#xff0c;可以说css是网页设计必不…

使用微软的 Visual Studio International Pack 1.0 进行网站简体与繁体的互转和得到汉字、拼音、笔画等相关信息...

本帖转自http://blog.csdn.net/net_lover/archive/2009/04/20/4095606.aspx 只为自己查看方便,希望孟老师勿怪. 2009年3月31日&#xff0c;微软发布了 Microsoft Visual Studio International Pack 1.0 SR1。Visual Studio International Pack 包含一组类库&#xff0c;该类库…

JavaScript获取网站域名

代码 <script language"javascript">//获取域名host window.location.host;host2document.domain; //获取页面完整地址url window.location.href;document.write("<br>host"host)document.write("<br>host2"host2)document.wr…

100个优秀的国外设计开发网站

100个优秀的国外设计开发网站&#xff0c;涵盖了Web设计&#xff0c;平面设计&#xff0c;Flash和Flex&#xff0c;设计资源等网站推荐。 常用设计网站 Spunk United 非常出色的杂志&#xff0c;里面提供的都是世界顶级设计师的专访&#xff0c;灵感以及文章还有更多。FreeLanc…

修改 设置 vs.net 网站 调试 设为 起始页

很简单&#xff0c;右键网站项目&#xff0c;打开【属性&#xff08;R&#xff09;】&#xff0c;找到【web】选项卡&#xff0c;然后会看到右边有一个【启动操作】&#xff0c;设置为当前页即可。 见百度问题: http://zhidao.baidu.com/question/195134372.html?an0&si1 …