这几天在学习webpy框架,之前学过一段时间,后来各种转移框架,导致没有学透彻,都是皮毛,各种打印hello world!

汗!

如今将webpy的学习过程和思路写下来,便于复习和总结。

资料主要是webpy官方文档,首先看了入门。然后就跟着官网的几个样例。照猫画虎啊

系统:ubuntu14.04

工具:VIM

样例:Todo list

没什么难的,主要是跟着写和调试的过程中理解数据的传输流程

######################################################################################################################################

结构例如以下:

/schema.sql
/templates:
/templates/base.html
/templates/index.html
/model.py
/todo.py
/schema.sql

CREATE TABLE todo (
id INT AUTO_INCREMENT,
title TEXT,
primary key (id)
);

这是创建todo表。主键是int类型的id,还有个title是text类型,我用的是mysql,首先要进入mysql,mysql -u root -p。输入password进入。建立数据库todo,create database todo;。然后建立数据表也叫todo。方式是运行schema.sql,在mysql下,use todo;source schema.sql;,提示ok,然后desc todo;

mysql> desc todo;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | text | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

这还是空表,查看表内容,我们用select * from todo;查看

/model.py

import web

db = web.database(dbn='mysql', db='todo', user='root',pw='123456')

def get_todos():
return db.select('todo', order='id') def new_todo(text):
db.insert('todo', title=text) def del_todo(id):
db.delete('todo', where="id=$id", vars=locals())

model中定义了数据库连接的方式。三个函数。各自功能非常easy理解

/todo.py
""" Basic todo list using webpy 0.3 """
import web
import model ### Url mappings urls = (
'/', 'Index',
'/del/(\d+)', 'Delete'
) ### Templates
render = web.template.render('templates', base='base') class Index: form = web.form.Form(
web.form.Textbox('title', web.form.notnull,
description="I need to:"),
web.form.Button('Add todo'),
) def GET(self):
""" Show page """
todos = model.get_todos() #调用model方法
form = self.form()
return render.index(todos, form)#把todos和form传入模板的index.html def POST(self):
""" Add new entry """
form = self.form()
if not form.validates():#form校验
todos = model.get_todos()
return render.index(todos, form)
model.new_todo(form.d.title)#把form文本框的内容加入到数据库
raise web.seeother('/')#转到‘/’下的页面 class Delete: def POST(self, id):
""" Delete based on ID """
id = int(id)
model.del_todo(id) #删除id的title
raise web.seeother('/')#转到index中的GET if __name__ == '__main__':
app = web.application(urls, globals())
app.run()

urls定义了訪问不同路径相应的处理类,render定义模板,Index中首先定义一个Form,一个文本框,一个button,然后分别定义GET和POST方法

/templates/index.html

$def with (todos, form) #传入todos,form

<table>
<tr>
<th>What to do ?</th>
<th></th>
</tr>
$for todo in todos: #循环显示todo.title
<tr>
<td>$todo.title</td>
<td>
<form action="/del/$todo.id" method="post">
<input type="submit" value="Delete"/>
</form>
</td>
</tr>
</table> <form action="" method="post">
$:form.render()
</form>
/templates/base.html

$def with (page)

<html>
<head>
<title>Todo list</title>
</head>
<body> $:page </body>
</html>

页面都在body中显示

执行python todo.py 8090

浏览器中打开:http://0.0.0.0:8090/

8090port是自己定义的,默认的也行。只是我的机器上默认的8000被占了,指定了8090,用户能够自己写

执行界面如图:

不要以为没事了。我測试了一下,插入英文能够正确显示,可是插入中文显示的是:??这是数据库编码问题还是模板的显示问题还没进一步弄明确,先往下做

webpy学习笔记之中的一个的更多相关文章

  1. jquery-mobile 学习笔记之中的一个(基础属性)

    写在前面 本文是依据w3c 学习轨迹,自己研习过程中记录下的笔记,仅仅供自己学习轨迹记录之用,不喜勿喷. 0 引入库 引入相应的文件: <link rel="stylesheet&qu ...

  2. MySQL学习笔记之中的一个 MySQL入门

    本人之前接触的关系型数据库主要是oracle和sqlserver,而对于mysql知之甚少,但查阅网上资料发现,mysql与oracle非常相似,所以学起来应该不会非常费劲,在总结的时候可能很多其它的 ...

  3. Yii学习笔记之中的一个(安装与基础环境的配置)

    0. 下载yii http://www.yiiframework.com/download/ 1. 訪问 basic 基础文件夹下的 web 文件夹 出现图1 的错误 :    Invalid Con ...

  4. HTML学习笔记之中的一个(input文件选择框的封装)

    方式一:直接透明隐藏 .file_button_container,.file_button_container input {background: transparent url(./img/BT ...

  5. hibernate学习笔记之中的一个(JDBC回想-ORM规范)

    JDBC回想-ORM规范 JDBC操作步骤 注冊数据库驱动 Class.forName("JDBCDriverClass") 数据库 驱动程序类 来源 Access sun.jdb ...

  6. jquery 深入学习笔记之中的一个 (事件绑定)

    [jquery 事件绑定] 1.加入元素事件绑定 (1) 加入事件为当前元素 $('p').on('click',function(){ //code here ... }); (2) 加入事件为未来 ...

  7. C#.NET学习笔记2---C#.第一个C#程序

    C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序:   ...

  8. The Pragmatic Programmer 读书笔记之中的一个 DRY-Don’t Repeat Youself

     The Pragmatic Programmer读书笔记之中的一个 DRY-Don't Repeat Youself 尽管自己买了非常多软件project方面的书,可是由于时间的问题.一直没有静 ...

  9. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

随机推荐

  1. JAVA基础——生产者消费者问题

    1.生产者消费者问题:经典案例 生产者和消费者问题是操作系统的经典问题,在实际工作中也常会用到,主要的难点在于协调生产者和消费者,因为生产者的个数和消费者的个数不确定,而生产者的生成速度与消费者的消费 ...

  2. ms_sql 触发器记录表字段数据变化的日志 -针对一张表操作

    create table sto (id int not null, -- 主键字段 de datetime -- 被跟踪的字段 constraint pk_sto primary key(id)) ...

  3. show()的方向

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. 洛谷——P1602 Sramoc问题

    P1602 Sramoc问题 $bfs$搜索 保证第一个搜到的符合条件的就是最小的 #include<bits/stdc++.h> #define N 110000 using names ...

  5. LNMP环境搭建网站

    系统:Centos7.4 一台服务器安装nginx.php.mysql 原理不是很懂,但实测如下两种环境下都能成功,这里做下记录: 1.一个干净的系统,从0开始完成所有步骤,完成LNMP搭建 2.已经 ...

  6. Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡

    0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...

  7. Bootstrap-Table 总结

    Bootstrap-Table 总结 jQuery Java Bootstrap-Table JS文件 传参:直接将需要的参数置于 queryParams 方法中,例如 line:formData注意 ...

  8. CSS——可视化格式模型

    CSS的可视化格式模型 CSS中规定每一个元素都有自己的盒子模型(相当一规定了这个元素如何显示): 然后可视化格式模型则是把这些盒子模型按照规则摆放到页面上,也就是如何布局: 换句话说,盒子模型规定了 ...

  9. 缩小Oracle目录下UNDOTBS01.DBF文件的大小

    缩小Oracle目录下UNDOTBS01.DBF文件的大小 分类: Oracle 使用sys用户登录Oracle 方法一:重置表空间大小 执行ALTER DATABASE DATAFILE 'D:OR ...

  10. 九度oj 题目1055:数组逆置

    题目1055:数组逆置 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8225 解决:3932 题目描述: 输入一个字符串,长度小于等于200,然后将数组逆置输出. 输入: 测试数据有多组 ...