这篇用来 记录一个 从零开始的 博客搭建,希望坚持下去,因为python 开发效率令人发指,所以会原生从零写 ORM ,Web 框架
前提是打好 异步 io 的基础, 使用异步,有一点要谨记,一旦开始异步,层层异步,从 http 到 数据库层都要用异步框架写异步函数,所谓开弓没有回头箭
# -*- coding: utf-8 -*-
import asyncio
import time
from functools import wraps
__author__ = 'Frank Li'
def time_count(func):
@wraps(func)
def inner_func(*args,**kw):
start = time.time()
result = func(*args,**kw)
end = time.time()
print('{} cost {:.1f} s...'.format(func.__name__,end-start))
return result
return inner_func
async def do_some_work(n):
await asyncio.sleep(n)
@asyncio.coroutine
def task_io_01():
print('{} start to run ...'.format(task_io_01.__name__))
n = 3
yield from do_some_work(n)
print('{} continue to work {} seconds later...'.format(task_io_01.__name__,n))
return task_io_01.__name__
@asyncio.coroutine
def task_io_02():
print('{} start to run ...'.format(task_io_02.__name__))
n = 5
yield from do_some_work(n)
print('{} continue to do the work in {} seconds'.format(task_io_02.__name__,n))
return task_io_02.__name__
@time_count
def main():
tasks = [task_io_02(),task_io_01()]
loop = asyncio.get_event_loop()
done, pending = loop.run_until_complete(asyncio.wait(tasks))
for d in done:
print('协程无序返回值:{}'.format(d.result()))
loop.close()
if __name__ == '__main__':
main()
环境准备 flask 都不要,惊掉下巴
python 3.7
pip install aiohttp
pip install jinja2
pip install aiomysql
pycharm( python 开发 IDE) + git bash(练习命令) + github(远程仓库)
在 pycharm 里 新建 project
并 cd 进入 project 目录
- 执行
git init
初始化本地仓库 - 登录 github 创建自己的远程仓库,因为没给钱是public 的仓库,放心,这点儿代码没人偷,而且python开发者首先信奉开源
- 执行命令
git remote add origin [email protected]:FrankLi99/awesome-python3-webapp.git
关联本地与远程仓库 - 创建如下图所示的 工程目录
- 添加 .gitignore 参考
执行
git add .
,git commit -m "init commit"
添加到暂存区,并提交到本地仓库的 master 分支,因为就我一个人开发,其实 master + dev 两个分支就已足够执行
git push -u origin master
推送本地仓库 master 分支 到远程 master 分支, -u 参数 还可以将 两个 master 分支 关联起来,下次拉取推送 就直接git pull/push origin master
了
上面这么麻烦,完全可以使用 git clone repo-addr 来解决,只是 为了练习下另一种方法
day2 接下来 ,添加第一个 webserver --》 app.py
# -*- coding: utf-8 -*-
__author__ = 'Frank Li'
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>',content_type='text/html')
@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()
自此,我们 Web 骨架搭好了,可以进行深入开发了。。。
- 添加并提交到本地仓库
git add www/app.py
- 推送到远程仓库
git push origin master