一、web.py简介
web.py是一款轻量级的Python web开发框架,简单、高效、学习成本低,特别适合作为python web开发的入门框架。官方站点:http://webpy.org/
二、web.py安装
1、下载:http://webpy.org/static/web.py-0.33.tar.gz
2、解压并进入web.py-0.33目录,安装:python setup.py install
三、创建简易博客
1、目录说明:主目录blog/,模板目录blog/templates
2、在数据库“test”中创建表“entries”
1
2
3
4
5
6
7
|
CREATE TABLE entries ( id INT AUTO_INCREMENT, title TEXT, content TEXT, posted_on DATETIME, primary key (id) ); |
3、在主目录创建blog.py,blog/blog.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#载入框架 import web #载入数据库操作model(稍后创建) import model #URL映射 urls = ( '/' , 'Index' , '/view/(/d+)' , 'View' , '/new' , 'New' , '/delete/(/d+)' , 'Delete' , '/edit/(/d+)' , 'Edit' , '/login' , 'Login' , '/logout' , 'Logout' , ) app = web.application(urls, globals ()) #模板公共变量 t_globals = { 'datestr' : web.datestr, 'cookie' : web.cookies, } #指定模板目录,并设定公共模板 render = web.template.render( 'templates' , base = 'base' , globals = t_globals) #创建登录表单 login = web.form.Form( web.form.Textbox( 'username' ), web.form.Password( 'password' ), web.form.Button( 'login' ) ) #首页类 class Index: def GET( self ): login_form = login() posts = model.get_posts() return render.index(posts, login_form) def POST( self ): login_form = login() if login_form.validates(): if login_form.d.username = = 'admin' / and login_form.d.password = = 'admin' : web.setcookie( 'username' , login_form.d.username) raise web.seeother( '/' ) #查看文章类 class View: def GET( self , id ): post = model.get_post( int ( id )) return render.view(post) #新建文章类 class New: form = web.form.Form( web.form.Textbox( 'title' , web.form.notnull, size = 30 , description = 'Post title: ' ), web.form.Textarea( 'content' , web.form.notnull, rows = 30 , cols = 80 , description = 'Post content: ' ), web.form.Button( 'Post entry' ), ) def GET( self ): form = self .form() return render.new(form) def POST( self ): form = self .form() if not form.validates(): return render.new(form) model.new_post(form.d.title, form.d.content) raise web.seeother( '/' ) #删除文章类 class Delete: def POST( self , id ): model.del_post( int ( id )) raise web.seeother( '/' ) #编辑文章类 class Edit: def GET( self , id ): post = model.get_post( int ( id )) form = New.form() form.fill(post) return render.edit(post, form) def POST( self , id ): form = New.form() post = model.get_post( int ( id )) if not form.validates(): return render.edit(post, form) model.update_post( int ( id ), form.d.title, form.d.content) raise web.seeother( '/' ) #退出登录 class Logout: def GET( self ): web.setcookie( 'username' , '', expires = - 1 ) raise web.seeother( '/' ) #定义404错误显示内容 def notfound(): return web.notfound( "Sorry, the page you were looking for was not found." ) app.notfound = notfound #运行 if __name__ = = '__main__' : app.run() |
4、在主目录创建model.py,blog/model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import web import datetime #数据库连接 db = web.database(dbn = 'MySQL' , db = 'test' , user = 'root' , pw = '123456' ) #获取所有文章 def get_posts(): return db.select( 'entries' , order = 'id DESC' ) #获取文章内容 def get_post( id ): try : return db.select( 'entries' , where = 'id=$id' , vars = locals ())[ 0 ] except IndexError: return None #新建文章 def new_post(title, text): db.insert( 'entries' , title = title, content = text, posted_on = datetime.datetime.utcnow()) #删除文章 def del_post( id ): db.delete( 'entries' , where = 'id = $id' , vars = locals ()) #修改文章 def update_post( id , title, text): db.update( 'entries' , where = 'id = $id' , vars = locals (), title = title, content = text) |
5、在模板目录依次创建:base.html、edit.html、index.html、new.html、view.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<! - - base.html - - > $ def with (page) <html> <head> <title>My Blog< / title> <mce:style><! - - #menu { width: 200px ; float : right; } - - >< / mce:style><style mce_bogus = "1" > #menu { width: 200px ; float : right; } < / style> < / head> <body> <ul id = "menu" > <li><a href = "/" mce_href = "">Home< / a>< / li> $ if cookie().get( 'username' ): <li><a href = "/new" mce_href = "new" >New Post< / a>< / li> < / ul> $:page < / body> < / html> <! - - edit.html - - > $ def with (post, form) <h1>Edit $form.d.title< / h1> <form action = " " method=" post"> $:form.render() < / form> <h2>Delete post< / h2> <form action = "/delete/$post.id" method = "post" > < input type = "submit" value = "Delete post" / > < / form> <! - - index.html - - > $ def with (posts, login_form) <h1>Blog posts< / h1> $ if not cookie().get( 'username' ): <form action = " " method=" post"> $:login_form.render() < / form> $ else : Welcome $cookie().get( 'username' )!<a href = "/logout" mce_href = "logout" >Logout< / a> <ul> $ for post in posts: <li> <a href = "/view/$post.id" mce_href = "view/$post.id" >$post.title< / a> on $post.posted_on $ if cookie().get( 'username' ): <a href = "/edit/$post.id" mce_href = "edit/$post.id" >Edit< / a> <a href = "/delete/$post.id" mce_href = "delete/$post.id" >Del< / a> < / li> < / ul> <! - - new.html - - > $ def with (form) <h1>New Blog Post< / h1> <form action = " " method=" post"> $:form.render() < / form> <! - - view.html - - > $ def with (post) <h1>$post.title< / h1> $post.posted_on<br / > $post.content |
6、进入主目录在命令行下运行:python blog.py,将启动web服务,在浏览器输入:http://localhost:8080/,简易博客即已完成。