登陆

了解python web开发,轻松建立web app

admin 2019-09-07 290人围观 ,发现0个评论

咱们好,今日共享给咱们的是了解python web开发,轻松建立web app,期望咱们学有所获!

因为 python代码的高雅漂亮且易于保护这一特色,越来越多的人挑选运用 Python做web开发。而 Python的 Web结构百家争鸣,现在比较盛行的结构有大包大揽的 Django,细巧灵敏的 Flask、 Bottle,还有功用高效的异步结构 Tornado、 sanic。这么多结构只需挑选一个,阅览他的文档,就能够很轻松的建立一个 web app,彻底不需求去管他完成的原理。

本篇文章意在对一个web开发做一个整理。

咱们翻开阅读器输入一个网址 yukunweb.com,然后就看到了阅读器给咱们显现的页面,这个时分翻开阅读器开发者东西,点击 Network,改写页面,会看到下方的恳求的 url,点击 Re科幻sponse,就能够看到服务器回来给阅读器的 html文件信息了。假如仿制 Response呼应的内容,保存为 index.html而且在阅读器翻开,仍然能够看到主页的内容,可是好像缺少了一些页面的款式和功用。

这是因为当阅读器接纳到主页的 HTML源码后,它会依据 HTML的规矩去显现页面,然后再依据 HTML里的链接,主动发送HTTP恳求给服务器,拿到相应的图片,和 JavaScript、 CSS等资源,终究显现出一个完好的页面。所以咱们会在 Network下面能看到许多额定的以 .js, .css等后缀的恳求了。

其实咱们看到的页面便是阅读器依照 HTML的规矩,展现给咱们的。 HTML告知阅读器那里是导航,那里是主栏,那里是侧栏。而这些信息怎样显现,或者是显现的款式,便是 CSS文件的劳绩。至于比方导航的下拉躲藏上拉显现便是 JavaScript的效果。

假如想要做Web开发,就必定得了解 HTML、 CSS、 JavaScript三剑客的常识,这儿引荐W3school的前端教程,也是我学习前端的当地:W3school

客户端和服务器通讯

了解了前段三剑客,就知道怎样去写一个网页。那么从咱们在阅读器的地址栏输入 URL,到 Web页面出现出来究竟阅历了什么。

一般这种经过发送恳求获取服务器资源的Web阅读器,都能够称为客户端(client)。首要发送一个恳求(request)给服务器,大多是以GET恳求办法拜访,服务器接纳到你的恳求,然后取到恳求的资源,回来给客户端。

服务器和客户端之间沟通是怎样进行的呢,服务器是怎样了解客户端的恳求的呢。这儿就需求一种协议规范,便是HTTP(HyperText Transfer Protocol,超文本传输协议)。能够说, Web是建立在 HTTP协议上通讯的。

仍然是之前的比如,翻开阅读器拜访 yukunweb.com,翻开阅读器开发者东西,点击图中符号的选项卡(记得点view parsed),能够看到客户端发给服务器的恳求头前两行。

GET / HTTP/1.1

Host: www.yukunweb.com

榜首行最初的GET表明恳求拜访服务器的类型,称为办法(method)。随后的字符 /指明晰恳求拜访的资源目标,即恳求URI。最终的 HTTP/1.1,即HTTP的版别号,用来提示客户端运用的 HTTP协议功用。

综上所述,榜首行恳求内容的意思是:恳求拜访某台 HTTP服务器上的 /(主页)页面资源。所以第二行的 Host表明恳求的域名也便是服务器地点地址。

假如是 POST恳求的话,不只会有恳求头部信息,还有一个 Form Data的恳求实体内容。

接纳到恳求的服务器呢,他会将恳求内容的处理成果以呼应的方法回来,看图中的榜首行:

最初的部分仍然是服务器对应的 HTTP版别,紧接着的 200 OK表明恳求的处理成果的状况码 (status code) 和原因短语。 200状况码就表明呼应成功,常见的 404表明拜访过错, 500表明服务器呼应过错。这儿的 OK是没有固定的规矩的,你也能够让他回了解python web开发,轻松建立web app来 GOOD啥的。

下一行是服务器信息,本站用的是 Nginx服务器,鄙人一行显现了创立呼应的日期时刻。鄙人一行的 Content-Type表明内容的类型,客户端会依靠他判别呼应的内容是网页仍是音频,图片等类型。

这儿仅仅简略的介绍了 HTTP协议,便是客户端与服务器之间的通讯协议。假如想要深化了解引荐阅览《HTTP威望攻略》。

WSGI

假如你阅读一个地址 http://www.yukunweb.com/search-result/?keywords=音乐,你会拜访到本站的音乐关键词的查找成果。咱们知道客户端发送恳求给服务器,那么服务器是怎样拿到资源的呢。其实这是交给后端运转的运用回来的,比如你抓取一个页面到获取到信息,这些逻辑的处理肯定是咱们的程序再跑。

可是,接纳而且解析客户端的 HTTP恳求在发送 HTTP呼应这些底层操作,后端的程序肯定是不会去处理的。所以,要想只专心于Web事务逻辑,还需求一个服务器和 web运用之间的嫁接层————WSGI。

什么是WSGI(Web Server Gateway 了解python web开发,轻松建立web appInterface)?

WSGI翻译过来便是Web服务器网关接口。他仅仅一个规范,界说了 Web服务器怎样与 Python运用程序进行交互,使得运用 Python写的 Web运用程序能够和Web服务器(nginx/apache)对接起来。

该规范的地址:PEP 333

WSGI是 Python的Web开发的柱石,有了它你就有了全部,它存在的意图有两个:

描绘 Web 服务器怎样与 Web 运用程序交互(将客户端恳求传给运用程序),

描绘 Web 运用程序怎样处理恳求和怎样回来数据给服务器。

因为 Python内置的规范库里有一个 WSGI库 wsgiref,咱们依据他来写一个表现 WSGI意图的比如:

from wsgiref.simple_server import make_server

def application(environ, start_response):

status = '200 OK'

response_headers = [('Content-type', 'text/html')]

start_response(status, response_headers)

body = 'Hello, {name} !!!'.format(name=environ['PATH_INFO'][1:] or 'WSGI')

return [body.encode('utf-8')]

app = make_server('', 8000, application)

app.serve_forever()

运转程序,假如没有报错,此刻翻开阅读器输入地址 127.0.0.1:8000和 127.0.0.1:8000/GuTianle,就能够看到程序回来的页面了。

咱们能够看到一个恳求,他的进口只需求一个 WSGI的处理函数。因为一切的恳求信息都包括在 environ中,这样咱们就能够依据这些信息去回来不同的数据。

参数:

environ:字典类型,存放了一切和客户端相关的信息。假如想知道他里边有哪些参数,能够更改上面的代码在 return 行上面加一个 for k, v in environ.items()的循环,打印出字典里的一切参数。

startresponse:一个可调用目标,接纳两个必选参数和一个可选参数:

status: 一个字符串,表明 HTTP 呼应状况字符串,如 200,404

responseheaders: 一个列表,包括有如下方法的元组:(headername, headervalue),用来表明 HTTP 呼应的 headers ,如('Content-type', 'text/html')

exc_info(可选): 用于犯错时,服务器需求回来给阅读器的信息

回来:一个可迭代目标, 服务器经过遍历这个可迭代目标能够获得body的全部内容,内容能够是 html也能够是 json。

这儿简略的介绍了 WSGI是什么,干什么。假如了解了 WSGI,那么写一个 Python的Web结构就很简略了。这也是为什么 Python有成百上千web结构的原因。

完成依据WSGI的结构

上面咱们了解了 WSGI是干什么的,那么咱们依据它完成一个简略的 web结构能够说垂手可得了。

from wsgiref.simple_server import make_server

class Application(object):

def __init__(self, environ, start_response):

self.start_response = start_response

self.path = environ['PATH_INFO']

def __iter__(self):

if self.path == '/':

status = '200 OK'

response_headers = [('Content-type', 'text/html')]

self.start_response(st了解python web开发,轻松建立web appatus, esponse_headers)

yield 'Hello,World!'.encode('utf-8')

elif self.path == '/wsgi':

status = '200 OK'

response_headers = [('Content-type', 'text/html')]

self.start_response(status, response_headers)

yield 'Hello,WSGI!'.enc了解python web开发,轻松建立web appode('utf-8')

else:

status = '404 NOT FOUND'

response_headers = [('Content-type', 'text/html')]

self.start_response(status, response_headers)

yield '404 NOT FOUND'.encode('utf-8')

if __name__ == "__main__":

app = make_server('127.0.0.1', 8000, Application)

print('Serving HTTP on port 8000...')

app.serve_forever()

这个 Application类只不过是对 WSGI又做了一层简略的封装罢了,因为上面说过 WSGI函数回来的是一个能够迭代目标,所以需求完成一个iter办法,里边操控了客户端的恳求路由而且回来不同的输出。

当然假如你想扩展成一个像样的结构还需求考虑许多,比方像 flask那样便利的路由体系,还有关于用户恳求办法的处理等等。总归是个很需求折腾的进程,比如 flask的0.了解python web开发,轻松建立web app1版别去掉注释也就 200 多行。

你们心心念念的高淇主讲Python400集视频教程第二季来啦!之前没有看过的小伙伴也能够1、2两季一同学习~!

转发+重视,私信小编“材料”即可收取!

最近发表

  2019年第六次临时股东大会决议公告

  本公司及董事会全章鱼彩票appios-江苏东方盛虹股份有限公司2019年第六次暂时股东大会决议布告体成员

章鱼彩票appios-江苏东方盛虹股份有限公司2019年第六次暂时股东大会决议布告

中天金融集团股份有限公司2019年第三次临时股东大会决议公告

2019-09-19
  •   关于董事长辞职及选举新任董事长的公告

      本公司董事会及全体董事

  • 章鱼彩票appios-江苏省新能源开发股份有限公司关于董事长辞去职务及推举新任董事长的布告

    2019-09-19
  •   本公司

    章鱼彩票appios-江苏赛福天钢索股份有限公司第三届董事会第十八次会议抉择布告

    2019-09-19
  •   

    上海洗霸科技股份有限公司关于参与上海辖区上市公司投资者团体接待日活动的布告

    2019-09-19
  • 请关注微信公众号
    微信二维码
    不容错过
    Powered By Z-BlogPHP