python 第一个网站应用

news/2024/5/10 1:27:33/文章来源:https://blog.csdn.net/weixin_34356555/article/details/89547200

Hello,第一个网页分析

打开文本编辑器。这里要说一下啦,理论上讲,所有的文本编辑器都可以做为编写程序的工具。前面已经提到的那个python IDE,是一个很好的工具,再有别的也行,比如我就用vim(好像我的计算机只能用vim了,上次运行Libre Office都很慢,敲一个键之后喝口水,才看到那个字母出来,等有人资助我了,也搞一个苹果的什么机器玩玩。)。用什么编辑工具,全是自己的喜欢罢了,不用争论那个好,这个差,只要自己顺手即可。

把下面的代码原封不动地复制过去,并且保存为文件名是hello.py的文件,存到那个目录中,自己选好了。

#!/usr/bin/env python
#coding:utf-8import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.webfrom tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)class IndexHandler(tornado.web.RequestHandler):def get(self):greeting = self.get_argument('greeting', 'Hello')self.write(greeting + ', welcome you to read: www.hiekay.com')if __name__ == "__main__":tornado.options.parse_command_line()app = tornado.web.Application(handlers=[(r"/", IndexHandler)])http_server = tornado.httpserver.HTTPServer(app)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()

进入到保存hello.py文件的目录,在shell或者命令输入框(windows可以用cmd)中,输入:

$ python hello.py

用python运行这个文件,其实就已经发布了一个网站,只不过这个网站太简单了。

接下来,打开浏览器,在浏览器中输入:[http://localhost:8000,得到如下界面:]image.png

当然,如果还可以在shell中用下面方式运行:

$ curl http://localhost:8000/
Hello, welcome you to read: www.hiekay.com $ curl http://localhost:8000/?greeting=hiekay
hiekay, welcome you to read: www.hiekay.com 

如果你的所有操作都正确,一定能够看到上面的结果。

恭喜你,迈出了决定性一步,已经可以用Tornado发布网站了。在这里似乎没有做什么部署,只是安装了Tornado。是的,不需要如同部署Nginx或者Apache那样,做各种设置了,因为Tornado就是一个很好的server,也是一个开发框架。

上面代码虽然跑起来了,但是每行都什么意思呢?下面就逐行解释,也就理解了Tornado这个框架的基本结构和用法。

WEB服务器工作流程

任何一个网站都离不开Web服务器,这里所说的不是指那个跟计算机一样的硬件设备,是指里面安装的软件,有时候初次接触的容易搞混。就来伟大的维基百科都这么说:

有时,这两种定义会引起混淆,如Web服务器。它可能是指用于网站的计算机,也可能是指像Apache这样的软件,运行在这样的计算机上以管理网页组件和回应网页浏览器的请求。

在具体的语境中,要注意分析,到底指的是什么。

关于Web服务器比较好的解释,推荐看看百度百科的内容,我这里就不复制粘贴了,具体可以点击连接查阅:WEB服务器

在WEB上,用的最多的就是输入网址,访问某个网站。全世界那么多网站网页,如果去访问他们,怎么能够做到彼此互通互联呢。为了协调彼此,就制定了很多通用的协议,其中http协议,就是网络协议中的一种。关于这个协议的介绍,网上随处就能找到,请自己google.

一张图简要说明web服务器的工作过程

image.png

  1. 创建listen socket, 在指定的监听端口, 等待客户端请求的到来
  2. listen socket接受客户端的请求, 得到client socket, 接下来通过client socket与客户端通信
  3. 处理客户端的请求, 首先从client socket读取http请求的协议头, 如果是post协议, 还可能要读取客户端上传的数据, 然后处理请求, 准备好客户端需要的数据, 通过client socket写给客户端

引入模块

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

这四个都是Tornado的模块,在本例中都是必须的。它们四个在一般的网站开发中,都要用到,基本作用分别是:

  • tornado.httpserver:这个模块就是用来解决web服务器的http协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado的非阻塞、单线程的特点在这个模块中体现。
  • tornado.ioloop:这个也非常重要,能够实现非阻塞socket循环,不能互通一次就结束呀。
  • tornado.options:这是命令行解析模块,也常用到。
  • tornado.web:这是必不可少的模块,它提供了一个简单的Web框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。

还有一个模块引入,是用from...import完成的

from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)

这两句就显示了所谓“命令行解析模块”的用途了。在这里通过tornado.options.define()定义了访问本服务器的端口,就是当在浏览器地址栏中输入http:localhost:8000的时候,才能访问本网站,因为http协议默认的端口是80,为了区分,我在这里设置为8000,为什么要区分呢?因为我的计算机或许你的也是,已经部署了别的注入Nginx服务器了,它的端口是80,所以要区分开,并且,后面我们还会将tornado和Nginx联合起来工作,这样两个服务器在同一台计算机上,就要分开喽。

定义请求-处理程序类

class IndexHandler(tornado.web.RequestHandler):def get(self):greeting = self.get_argument('greeting', 'Hello')self.write(greeting + ', welcome you to read: www.hiekay.com')

所谓“请求处理”程序类,就是要定义一个类,专门应付客户端向服务器提出请求(这个请求也许是要读取某个网页,也许是要将某些信息存到服务器上),服务器要有相应的程序来接收并处理这个请求,并且反馈某些信息(或者是针对请求反馈所要的信息,或者返回其它的错误信息等)。

于是,就定义了一个类,名字是IndexHandler,当然,名字可以随便取了,但是,按照习惯,类的名字中的单词首字母都是大写的,并且如果这个类是请求处理程序类,那么就最好用Handler结尾,这样在名称上很明确,是干什么的。

类IndexHandler的参数是tornado.web.RequestHandler,这个参数很重要,是专门用于完成请求处理程序的,通过它定义get()post()两个在web中应用最多的方法的内容(关于这两个方法的详细解释,可以参考:HTTP GET POST的本质区别详解,作者在这篇文章中,阐述了两个方法的本质)。

在本例中,只定义了一个get()方法。请注意,类中的方法可以没有别的参数,但是必须有self这个参数.

greeting = self.get_argument('greeting', 'Hello')这句中,当实例化之后,self对应的就是tornado.web.RequestHandler,而get_argument则是tornado.web.RequestHandler的一个方法。官方文档对这个方法的描述如下:

> RequestHandler.get_argument(name, default=, []strip=True)> > Returns the value of the argument with the given name.> > If default is not provided, the argument is considered to be required, and we raise a MissingArgumentError if it is missing.> > If the argument appears in the url more than once, we return the last value.> > The returned value is always unicode.

这段描述已经很清晰了,此外,看完这段说明,是否明白我在前面运行的:

$ curl http://localhost:8000/?greeting=hiekay
hiekay, welcome you to read: www.hiekay.com 

为什么通过http://localhost:8000/?greeting=hiekay,就可以实现对greeting的赋值。

接下来的那句self.write(greeting + ',weblcome you to read: www.hiekay.com)'中,write也是tornado.web.RequestHandler的一个方法,这发方法主要功能是向客户端反馈参数中的信息。也浏览一下官方文档信息,对以后正确理解使用有帮助:

> RequestHandler.write(chunk)[source]> > Writes the given chunk to the output buffer.> > To write the output to the network, use the flush() method below.> > If the given chunk is a dictionary, we write it as JSON and set the Content-Type of the response to be application/json. (if you want to send JSON as a different Content-Type, call set_header after calling write()).

main()方法

if __name__ == "__main__",从这句话开始执行编写的程序,前面相当于预备工作吧。这个方法跟以往执行python程序是一样的。

tornado.options.parse_command_line(),这是在执行tornado的解析命令行。在tornado的程序中,只要import模块之后,就会在运行的时候自动加载,不需要了解细节,但是,在main()方法中如果有命令行解析,必须要提前将模块引入。

Application类

下面这句是重点:

app = tornado.web.Application(handlers=[(r"/", IndexHandler)])

将tornado.web.Application实例化。这个实例化,本质上是建立了整个网站程序的请求处理集合,然后它可以被HTTPServer做为参数调用,实现http协议服务器访问。Application类的__init__方法参数形式:

def __init__(self, handlers=None, default_host="", transforms=None,**settings):pass

在一般情况下,handlers是不能为空的,因为Application类通过这个参数的值处理所得到的请求。例如在本例中,handlers=[(r"/", IndexHandler)],就意味着如果通过浏览器的地址栏输入根路径(http://localhost:8000就是根路径,如果是http://localhost:8000/hiekay,就不属于根,而是一个子路径或目录了),对应这就是让名字为IndexHandler类处理这个请求。

通过handlers传入的数值格式,一定要注意,在后面做复杂结构的网站是,这里就显得重要了。它一个list,list里面的参数是列表,列表的组成包括两部分,一部分是请求路径,另外一部分是处理程序的类名称。注意请求路径可以用正则表达式书写。举例说明:

handlers = [(r"/", IndexHandlers),              #来自根路径的请求用IndesHandlers处理(r"/hiekay/(.*)", HiekayHandlers),  #来自/hiekay/以及其下任何请求(正则表达式表示任何字符)都由HiekayHandlers处理
]

注意

在这里我使用了r"/"的样式,意味着就不需要使用转义符,r后面的都表示该符号本来的含义。例如,n,如果单纯这么来使用,就以为着换行,因为符号“”具有转义功能,当写成r"\n"的形式是,就不再表示换行了,而是两个字符,和n,不会转意。一般情况下,由于正则表达式和 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。(关于正则表达式,看官姑且网上搜索,在后面的课程中,我也会介绍)

关于Application类的介绍,告一段落,但是并未完全讲述了,因为还有别的参数设置没有讲,看官有兴趣可以阅读官方的文档资料,地址是:http://tornado.readthedocs.org/en/latest/_modules/tornado/web.html#Application

HTTPServer类

实例化之后,Application对象(用app做为标签的)就可以被另外一个类HTTPServer引用,形式为:

http_server = tornado.httpserver.HTTPServer(app)

HTTPServer是tornado.httpserver里面定义的类。HTTPServer是一个单线程非阻塞HTTP服务器,执行HTTPServer一般要回调Application对象,并提供发送响应的接口,也就是下面的内容是跟随上面语句的(options.port的值在IndexHandler类前面通过from...import..设置的)。

http_server.listen(options.port)

这种方法,就建立了单进程的http服务。

请牢记,如果在以后编码中,遇到需要多进程,请参考官方文档说明:http://tornado.readthedocs.org/en/latest/httpserver.html#http-server

IOLoop类

剩下最后一句了:

tornado.ioloop.IOLoop.instance().start()

这句话,总是在__main()__的最后一句。表示可以接收来自HTTP的请求了。

以上把一个简单的hello.py剖析。想必对Tornado编写网站的基本概念已经有了。

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

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

相关文章

wallhaven壁纸网站改版后爬虫小例子

wallhaven壁纸网站改版后爬虫 新手上路,老司机绕路 最近学习python,尝试写一点小爬虫 这是改版后的wallhaven壁纸网站,爬取热门榜单。首先对网站进行分析 按F12启动开发者工具,对网页进行分析。 现在页面上的图片都是缩略图没有爬…

ASP.NET WEB网站简单入门(简单Demo -发布)

简单分几个阶段 一、简单代码实现 1.新建工程 2.打开设计器(查看设计器),托出一个label ,写上Hello 3.点击调试,即可看到网页效果 4.重新生成后,发布到指定路径下 5.弹出网站发布设置面板,点击&l…

爬虫7----动态网站抓取

一、Ajax和动态HTML 二、Selenium 使用教程 一、实例1 二、元素的选取 2.1实例讲解 三、页面操作 1.页面交互和表单填充 代码如下: 2.元素拖拽 3.切换窗口 3.如何切换frame selenium提供了**switch_to.frame()**方法来切换frame 3.1、从frame中切回主文档…

亿恩云主机,网站所有页面头部开始被插入iframe,提交问题给亿恩技术,回应的是沉默...

用的亿恩的云主机&#xff0c;今天发现所有页面头部最开始被插入了如下一段代码&#xff1a; <iframe src http://122.224.95.100:6655/server.exe width0 height0></iframe> 后经检查&#xff0c;服务器上的文件并没有被篡改&#xff0c;补丁也打了&#xff0c;也…

五款开源免费的建站系统推荐

最近研究了下开源的建站系统&#xff0c;推荐5款国内的吧&#xff0c;都有免费版本&#xff0c;有需要可以去试试。 ECTouch ECTouch是一款开源免费的移动商城网店系统。能够帮助企业和个人快速构建手机移动商城并减少二次开发带来的成本。 ECTouch采用PHPMYSQL方式运行&…

学英语好网站

转载于:https://www.cnblogs.com/DeeLMind/p/7627276.html

[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护

这是作者的系列网络安全自学教程&#xff0c;主要是关于网安工具和实践操作的在线笔记&#xff0c;特分享出来与博友共勉&#xff0c;希望您们喜欢&#xff0c;一起进步。前文分享了Python网络攻防基础知识、Python多线程、C段扫描和数据库编程&#xff0c;本文将分享Python攻防…

简单用户登录网站(HttpServlet1.1版本)

案例说明:用户在登录界面输入非空信息,在欢迎页面显示用户信息 Login1.java 用户登录界面 对Login1.java进行Servlet部署 LoginCl1.java 用户业务逻辑处理,采用sendRedirect()方法 对LoginCl1.java进行Servlet部署 Wel1.java 欢迎页面(显示用户信息) 对Wel1.java进行Servlet部署…

网站流量日志数据分析系统

1&#xff0e; 点击流数据模型1.1&#xff0e; 点击流概念点击流&#xff08;Click Stream&#xff09;是指用户在网站上持续访问的轨迹。这个概念更注重用户浏览网站的整个流程。用户对网站的每次访问包含了一系列的点击动作行为&#xff0c;这些点击行为数据就构成了点击流数…

渗透之路 信息收集【第四篇】网站四大套件识别

国内网站架构情况 特性1&#xff1a; 开源cms搭建(直接找cms漏洞) 非cms搭建(即需要代码开发)特性2&#xff1a; 阿里云&#xff0c;腾讯云等(自带防护&#xff0c;难度最大) 小中型IDC空间商 企业内部服务器特性3&#xff1a; 单一站点 多域名站点 多目录站点(多程序站点) 混合…

2017年网站安全狗绕过WebShell上传拦截的新姿势

本文来源&#xff1a;https://www.webshell.ren/post-308.html 今天有一位朋友发一个上传点给我 我一看是南方cms 有双文件上传漏洞 本来可以秒的 但是看到了 安全狗 从图片可以看到http返回信息 有安全狗拦截 哪怎么办呢 我也是搞了以前私藏的姿势 后来发现都不行 发现行…

跟着百度学PHP[14]-COOKIE的应用/网站登陆案例完整案例

先在数据库当中创建以下数据&#xff1a; mysql> create table user(-> id int not null auto_increment,-> username varchar(50) not null default ,-> password char(32) not null default ,-> email varchar(80) not null default ,-> allow_1 smallint …

逻辑漏洞-客户端验证的邮箱-Web渗透实例之中国教育部青少年普法网站逻辑漏洞...

转载自&#xff1a;http://www.zmnhssn.com/?post61 漏洞地址&#xff1a;https://user.qspfw.com 用户登陆界面 具体漏洞地址: 用户密码找回界面&#xff1a;https://user.qspfw.com/page/user/findpwd/forget_pwd.do 这里可以确认网站有没有这个用户&#xff0c;这个用户…

python局域网访问主机网站_管家婆辉煌版如何实现在局域网如何访问

管家婆辉煌版本我们很多客户都在使用&#xff0c;是一款常用的进销存软件&#xff0c;那么局域网如何实现访问呢&#xff1f;在服务器上安装好管家婆服务器端后&#xff0c;然后打开套接字和管家婆辉煌版服务器端&#xff0c;这两个程序建议设置为开机启动&#xff0c;如图就是…

万能通用的各大网站(全民简历、简历本等) 简历模板 -- 免费下载方法

文章目录前言一、开始步骤1.下载破解版福昕PDF编辑器2.下载wkhtmltopdf3.选择模板并填好信息4.保存网页文件5.本地搭建一个简易web服务器6.使用福昕PDF去除多余的对象二、最终效果总结前言 现在很多人需要制作一份自己的简历&#xff0c;为了格式规范和方便&#xff0c;于是乎…

修改ip地址软件就打不开_导致网站打不开的原因有哪些

我们在网上查询资料时经常会遇到网站打不开&#xff0c;浏览器打不开的情况&#xff0c;这是上网时候广大网友经常碰见的问题&#xff0c;那么今天&#xff0c;天企网络将针对网页打不开这一问题问题做一做综合的分析&#xff0c;让您对网站打不开的原因有哪些有一个全面的了解…

非科班学习编程一定得知道这几个网站!

有些才开始学习计算机的小伙伴&#xff0c;不知道哪里去哪些网站学习课程&#xff0c;其实最开始通过视频的学习可以了解技术的整体架构&#xff0c;然后再去阅读经典书籍并实战就好了&#xff0c;下面盘点一下曾经留下过脚印的国内网站。原文已经收录开源项目LinuxGuide 1 B站…

functions.php隐藏恶意代码,wordpress程序网站又一次的被挂恶意代码以及简单的清除网站木马与恶意软件的方法...

现在已经去除了恶意木马代码了可以放心浏览本站&#xff01;这次的恶意码我都不知道怎么出来的&#xff0c;而且同时感染了我两个wordpress网站&#xff0c;其中一个就是ps笔刷吧&#xff01;是昨晚感染的&#xff0c;eset检测到http://brushes8.com/ JS/Redirector.NIL 特洛伊…

网站服务器 千牛,云服务器千牛

云服务器千牛 内容精选换一换Windows弹性云服务器虚拟化驱动异常(Tools没有正常运行)。为保证弹性云服务器的正常使用&#xff0c;请参见本节内容进行修复。弹性云服务器虚拟化驱动异常会影响弹性云服务器服务数据安全、可用性、系统性能。具体影响的表现&#xff1a;可能导致弹…

linux个人网站发布,51CTO博客-专业IT技术博客创作平台-技术成就梦想

发布个人站点1&#xff0e;创建个人用户和站点[rootlocalhost ~]# useradd baidu[rootlocalhost ~]# passwd baiduChanging password for user baidu[rootlocalhost ~]# su - baidu[baidulocalhost ~]$ mkdir public_html[baidulocalhost ~]$ cd public_html/[baidulocalhost p…