MVC框架
使用模板
MVC的全名是Model View Controller,是模型-視圖-控制器的縮寫,是一種軟件設計典范。使用MVC的目的是使M和V的代碼分離,從而使一個程序可以有不同的表現形式。
各種錯誤
python3,這個地方在所難免。實在沒想到用IDE照著敲都會有一些不注意的小細節錯誤。
一開始頁面是 404 Not Found。等查明原因后發現add_routes()
函數沒有執行,里面有三四處錯誤。一般來說,404 Not Found的日志不會有這么一句::add route GET / => index(request)
,從此處我感受到了日志的重要性。
后來還有一個錯誤,和評論區很多人一樣是 500 Internal Server Error Server got itself in trouble
,出現這種錯誤一般是handlers.py
照著廖大教程上copy(嗯,如果不是copy你會發現錯誤的)。因為先前使用的是asnyc/await
標記實現異步操作,所以此處也應該改為這種方式。
正確的日志
python3基礎教程廖雪峰云、意識到日志的重要性,我就想著發上來,讓有疑惑的人對比一下。
INFO:root:create database connection pool...
INFO:root:init jinja2...
INFO:root:set jinja2 template path: C:\Users\ChanWunsam\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: passwd ==> <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\ChanWunsam\awesome-python3-webapp\www\static
INFO:root:server started at http://127.0.0.1:9000...
INFO:root:Request: GET /
INFO:root:Response handler...
INFO:root:call with args: {'request': <Request GET / >}
INFO:root:SQL: select `id`, `email`, `passwd`, `admin`, `name`, `image`, `created_at` from `users`
INFO:root:rows returned: 2
INFO:aiohttp.access:127.0.0.1 - - [26/Jan/2018:12:17:38 +0000] "GET / HTTP/1.1" 200 402 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
INFO:root:Request: GET /
INFO:root:Response handler...
INFO:root:call with args: {'request': <Request GET / >}
INFO:root:SQL: select `id`, `email`, `passwd`, `admin`, `name`, `image`, `created_at` from `users`
INFO:root:rows returned: 2
INFO:aiohttp.access:127.0.0.1 - - [26/Jan/2018:12:18:08 +0000] "GET / HTTP/1.1" 200 402 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
INFO:root:Request: GET /
INFO:root:Response handler...
INFO:root:call with args: {'request': <Request GET / >}
INFO:root:SQL: select `id`, `email`, `passwd`, `admin`, `name`, `image`, `created_at` from `users`
INFO:root:rows returned: 2
INFO:aiohttp.access:127.0.0.1 - - [26/Jan/2018:12:18:10 +0000] "GET / HTTP/1.1" 200 402 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
嗯,出現錯誤,不要懷疑教程,好好檢查一下handlers
,coreweb
,app
這幾個文件。