廖大python实战教程第七天

MVC框架

使用模板

MVC的全名是Model View Controller,是模型-视图-控制器的缩写,是一种软件设计典范。使用MVC的目的是使M和V的代码分离,从而使一个程序可以有不同的表现形式。

各种错误

这个地方在所难免。实在没想到用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标记实现异步操作,所以此处也应该改为这种方式。

正确的日志

意识到日志的重要性,我就想着发上来,让有疑惑的人对比一下。

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这几个文件。

原文地址:https://www.cnblogs.com/ChanWunsam/p/10018268.html

时间: 2024-08-01 21:42:53

廖大python实战教程第七天的相关文章

廖大python实战项目第五天

PS: 决定还是坚持写博客记录一下比较好. 今天的实战内容是编写web框架,如果之前的知识不熟悉的话确实看不大懂.在这里奉上自己的理解以及帮助理解的相关资料和文档. Web框架 首先我们要知道web框架是什么东西,它到底要怎么实现.这一点廖大在web开发的WSGI接口.使用web框架这两篇文章里已经说过了.摘要一些略作说明: def application(environ, start_response): start_response('200 OK', [('Content-Type', '

廖大python实战项目第四天

数据库操作问题 参考: 用命令行创建MySQL数据库 菜鸟教程--MySQL (尤其是这一篇:MySQL管理) 启动MySQL时出现问题 数据库操作这块先会用就行.过程中难免遇到很多奇奇怪怪的问题,我把我自己解决的问题发上来. 首先就是廖大的test有一些小错误,我根据评论区以及自己的理解改了一下: # 'test.py' #!/usr/bin/env python3 # -*- coding: utf-8 -*- import orm import asyncio from models im

Kylin大数据 实战 教程

Kylin大数据实战教程链接:https://pan.baidu.com/s/17vuLNQDjBGUirQV_IdXgfg提取码:bj4b 复制这段内容后打开百度网盘手机App,操作更方便哦课程学习地址:https://www.xuetuwuyou.com/course/316请添加链接描述课程出自学途无忧网:www.xuetuwuyou.com咨询QQ:2591905126 本课程为专题课,通过全面讲解Kylin架构原理.分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,

Python Spark大数据分析实战教程下载|pyspark教程

分享网盘下载地址--https://pan.baidu.com/s/1c1OjpSW 密码: a5ks Python是数据分析最常用的语言之一,而Apache Spark是一个开源的强大的分布式查询和处理引擎. 本课程以案例驱动的方式讲解如何基于Python语言进行Spark Application编程,完成数据获取.处理.数据分析及可视化方面常用的数据分析方法与技巧,通过这些实际案例让学员轻松掌握使用PySpark分析来自不同领域的数据.

Kylin大数据实战教程_Kylin视频教程

课程下载地址:https://pan.baidu.com/s/1jcRI2qHPopCb2FnBT9UEsA 提取码: inja 本课程为专题课,通过全面讲解Kylin架构原理.分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,从而解决海量数据多维指标动态计算耗时问题.复杂条件筛选问题以及跨月.季度.年等大时间区间查询问题. 第一章:[补习]大数据平台集群节点准备1虚拟机介绍2VMware虚拟机安装3Linux操作系统介绍4虚拟机安装15虚拟机安装26Linux网络配置7Li

学习廖大python心得笔记-字符串和编码

1.list 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1. list是一个可变的有序表,所以,可以往list中追加元素到末尾: >>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam'] 也可以把元素插入到指定的位置,比如索引号为1的位置: >>&

python基础教程(七)

本章介绍如何将语句组织成函数,这样,可以告诉计算机如何做事. 下面编写一小段代码计算婓波那契数列(前两个数的和是第三个数) fibs = [0,1] # 定义一个列表,初始内容是0,1 for i in range(8): #循环8次 fibs.append(fibs[-2]+fibs[-1]) #append在末尾追加一个数,这个是它前面两个数的和 #输入 >>> fibs #输出 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 因为赋完值fibs已经有两个数了(0

Android简易实战教程--第七话《在内存中存储用户名和密码》

首先是配置文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:pa

廖雪峰python实战

1. ORM框架 从使用的角度 user1 = User(...)  user.save()  这些角度去理解ORM框架 因为ORM框架本身就是为了方便用户去使用的工具, ORM的框架设计需要从用户使用的角度去设计 ORM框架 2. coroweb框架 aiohttp已经是一个框架了 aiohttp的路由函数:接收 request对象,返回response对象 需要设计一个框架,能够从request对象中自动提取fn函数需要的参数,调用fn,将fn结果返回 这就是coroweb框架 middle