python,web编程(一)

自学web方向已经很久了,一直没有弄清楚整个web开发的底层概念,秉着先知道如何做,再知道为什么这么做的原则,之前一直都是以实现某个功能为主去学习。现在为了弄清整个web开发的概念,看了廖大大的教程再结合之前自己接触的web开发方面,顿时有一种豁然开朗的感觉,现在决定跟着教程走一遍。先附上教程链接:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432170876125c96f6cc10717484baea0c6da9bee2be4000 

 

首先一个web应用的本质就是先由浏览器发送一个http请求给服务器,服务器收到请求后生成一个HTML文档然后将文档加入body发回给浏览器,浏览器收到信息后显示body。一般解析请求,接受请求,发送请求这些行为都是由apache,IIS,Nginx来做的,我们要做的就是生成html,这样就是一个WSGI接口。

先搭建开发环境,根据教程使用的是python3+mysql,安装相应的包

pip install aiohttp        #异步处理框架
pip install jinja2          #模板引擎
pip install aiomysql      #异步mysql驱动

整个webapp的骨架,就是通过异步IO,处理http请求,整个webapp监听着端口的请求,每次服务器端接收到一个请求就建立一个子进程去响应这个请求,提取本地的html文件放入返回的http请求中的body中。而整个html文件的生成又涉及到MVC架构,V就是VIEW层,负责展示HTML,C是控制层,负责调度url,M是model层,负责处理数据。C通过URL调度model和view,生成一个html页面。现在先根据教程写一个web骨架:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import logging; logging.basicConfig(level=logging.INFO)

import asyncio, os, json, time
from datetime import datetime

from aiohttp import web

def index(request):
    return web.Response(body=b'<h1>Awesome</h1>')

@asyncio.coroutine
def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET','/',index)
    srv = yield from loop.create_server(app.make_handler(),'127.0.0.1',9000)
    logging.info('server started at http://127.0.0.1:9000...')
    return srv

loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

logging模块负责生成日志,index函数负责响应http请求并返回一个html。aiohttp则是基于asyncio实现的HTTP框架。通过装饰器@asyncio.coroutine将一个生成器扔给eventloop去执行,这个eventloop监听本机ip的9000端口不断接受请求进行处理。并通过add_route方法设定url为http://127.0.0.1:9000,将index返回的html显示在这个url上。这是我理解的整个web骨架的原理 

posted @ 2016-06-22 17:00  goddessofpom  阅读(10227)  评论(0编辑  收藏  举报