使用 python 搭建 博客系统

这篇用来 记录一个 从零开始的 博客搭建,希望坚持下去,因为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 目录

  1. 执行 git init 初始化本地仓库
  2. 登录 github 创建自己的远程仓库,因为没给钱是public 的仓库,放心,这点儿代码没人偷,而且python开发者首先信奉开源
  3. 执行命令 git remote add origin [email protected]:FrankLi99/awesome-python3-webapp.git 关联本地与远程仓库
  4. 创建如下图所示的 工程目录
  5. 添加 .gitignore 参考
  6. 执行 git add . , git commit -m "init commit" 添加到暂存区,并提交到本地仓库的 master 分支,因为就我一个人开发,其实 master + dev 两个分支就已足够

  7. 执行 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 骨架搭好了,可以进行深入开发了。。。

  1. 添加并提交到本地仓库 git add www/app.py
  2. 推送到远程仓库 git push origin master

猜你喜欢

转载自www.cnblogs.com/Frank99/p/10563405.html