前言
跟随廖雪峰老师的教程学习Python端断断续续有一个学期了,中间停了好几次,好在小学期和假期加了把劲,努力追上了进度。总体感觉是前面比较简单,后面越来越难。Python以简洁著称,而简洁则要求他有很高的抽象性,所以对于习惯了C语言操作底层的人来说,思维转换非常重要。到了实战这一部分,确实会有不少代码读都读不懂,更不用说写,所以还是想写这样一篇博文来梳理一下整体的脉络。
按照教程以Day为单位进行梳理
Day1:搭建开发环境
安装异步框架:pip install aiohttp
前端模板引擎:pip install jinja2
MySql的Python异步驱动:pip install aiomysql
创建项目目录
awesome-python3-webapp/ <-- 根目录
|
+- backup/ <-- 备份目录
|
+- conf/ <-- 配置文件
|
+- dist/ <-- 打包目录
|
+- www/ <-- Web目录,存放.py文件
| |
| +- static/ <-- 存放静态文件
| |
| +- templates/ <-- 存放模板文件
|
+- ios/ <-- 存放iOS App工程
|
+- LICENSE <-- 代码LICENSE
虽然最后代码都写到了www文件夹里,但至少这个目录看起了还是蛮科学的。。。
最后,记得为我们的工程文件夹建立Git仓库并同步至Github
Day2:编写Web App的骨架
我们的Web App建立在asyncio的基础上,因此用aiohttp写一个基本的app.py(asyncio是Python提供的一个异步IO框架)
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) #对于首页的 / 请求进行相应,响应方法为上面的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()
@asyncio.coroutine把一个generator标记为coroutine类型,然后,我们就把这个coroutine扔到EventLoop中执行。在Python最新的语法中,可以用async替换@asyncio.coroutine,用await替换yield from,效果相同。
上面的程序中,我们利用aiohttp提供的框架创建了一个简单的服务器,监听9000端口的HTTP请求,这是最基本的操作,后续工作都将在这个服务器上进行。