Discuss / Python / 采用 web.run_app(),运行正常

采用 web.run_app(),运行正常

Topic source

xian_wen

#1 Created at ... [Delete] [Delete and Lock User]

由于make_handler() Deprecated since version 3.2,所以用web.run_app()代替loop.create_server()。至于数据库连接池的创建,可单独定义协程init_db(),然后绑定到app.on_startup,以便在 app 启动之后,数据库连接池随之创建。

# app.py

...

async def init_db(app):
    # If on Linux, use another user instead of 'root'
    await orm.create_pool(
        host=configs.db.host,
        port=configs.db.port,
        user=configs.db.user,
        password=configs.db.password,
        db=configs.db.database
    )


app = web.Application(middlewares=[
    logger_factory,
    response_factory
])
init_jinja2(app, filters=dict(datatime=datetime_filter))
add_routes(app, 'handlers')
add_static(app)
app.on_startup.append(init_db)
web.run_app(app, host='localhost', port=9000)

往数据库插入数据,由于idcreated_at字段是系统自动生成,直接在数据库中用命令行操作会报错,因此还是利用 Day 4 创建的 test.py 文件来添加数据更方便。

# test.py

# -*- coding: utf-8 -*-
# @author xian_wen
# @date 5/31/2021 11:14 PM

import asyncio
import orm
from models import User


async def test():
    await orm.create_pool(user='root', password='password', db='awesome')
    a = User(name='Administrator', email='admin@example.com', password='1234567890', image='about:blank')
    x = User(name='xian_wen', email='xian_wen@example.com', password='1234567890', image='about:blank')
    t = User(name='Test', email='test@example.com', password='1234567890', image='about:blank')
    await a.save()
    await x.save()
    await t.save()


loop = asyncio.get_event_loop()
loop.run_until_complete(test())

测试结果:

mysql> DELETE FROM users;
Query OK, 3 rows affected (0.01 sec)
$ python test.py
mysql> SELECT * FROM users;
+----------------------------------------------------+----------------------+------------+-------+---------------+-------------+------------------+
| id                                                 | email                | password   | admin | name          | image       | created_at       |
+----------------------------------------------------+----------------------+------------+-------+---------------+-------------+------------------+
| 001622703828810cb369f7a0ce544f19cb4bff195fa236f000 | admin@example.com    | 1234567890 |     0 | Administrator | about:blank |  1622703828.8104 |
| 001622703828824980a2c5cbd314db8a7a3e4e8a28df2f5000 | xian_wen@example.com | 1234567890 |     0 | xian_wen      | about:blank | 1622703828.82444 |
| 00162270382882611800bb199e04316914a17d315157ea5000 | test@example.com     | 1234567890 |     0 | Test          | about:blank | 1622703828.82643 |
+----------------------------------------------------+----------------------+------------+-------+---------------+-------------+------------------+
3 rows in set (0.01 sec)
$ python app.py
INFO:root:Init jinja2...
INFO:root:Set jinja2 template path: C:\Users\xian_wen\Desktop\PycharmProjects\liaoxuefeng\awesome-python3-webapp\www\templates
INFO:root:Found model: User (table: users)
INFO:root:  Found mapping: id ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: email ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: password ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: admin ==> <BooleanField, boolean:None>
INFO:root:  Found mapping: name ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: image ==> <StringField, varchar(500):None>
INFO:root:  Found mapping: created_at ==> <FloatField, real:None>
INFO:root:Found model: Blog (table: blogs)
INFO:root:  Found mapping: id ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: user_id ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: user_name ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: user_image ==> <StringField, varchar(500):None>
INFO:root:  Found mapping: name ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: summary ==> <StringField, varchar(200):None>
INFO:root:  Found mapping: content ==> <TextField, text:None>
INFO:root:  Found mapping: created_at ==> <FloatField, real:None>
INFO:root:Found model: Comment (table: comments)
INFO:root:  Found mapping: id ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: blog_id ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: user_id ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: user_name ==> <StringField, varchar(50):None>
INFO:root:  Found mapping: user_image ==> <StringField, varchar(500):None>
INFO:root:  Found mapping: content ==> <TextField, text:None>
INFO:root:  Found mapping: created_at ==> <FloatField, real:None>
INFO:root:Add route GET / => index(request)
INFO:root:Add static /static/ => C:\Users\xian_wen\Desktop\PycharmProjects\liaoxuefeng\awesome-python3-webapp\www\static
INFO:root:Create a database connection pool...
======== Running on http://localhost:9000 ========
(Press CTRL+C to quit)
INFO:root:Request: GET /
INFO:root:Response handler...
INFO:root:Call with kwargs: {'request': <Request GET / >}
INFO:root:SQL: SELECT id, email, password, admin, name, image, created_at FROM users
INFO:root:Rows returned: 3
INFO:aiohttp.access:::1 [03/Jun/2021:07:04:51 +0000] "GET / HTTP/1.1" 200 468 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"

configs 找不到


  • 1

Reply