web.py 十分钟创建简易博客

来源:互联网 发布:带着空间去民国淘宝 编辑:程序博客网 时间:2024/04/30 10:33


一、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”

[python] view plaincopy
  1. CREATE TABLE entries (    
  2.     id INT AUTO_INCREMENT,    
  3.     title TEXT,    
  4.     content TEXT,    
  5.     posted_on DATETIME,    
  6.     primary key (id)    
  7. );   
 

3、在主目录创建blog.py,blog/blog.py

[python] view plaincopy
  1. #载入框架  
  2. import web  
  3. #载入数据库操作model(稍后创建)  
  4. import model  
  5. #URL映射  
  6. urls = (  
  7.         '/''Index',  
  8.         '/view/(/d+)''View',  
  9.         '/new''New',  
  10.         '/delete/(/d+)''Delete',  
  11.         '/edit/(/d+)''Edit',  
  12.         '/login''Login',  
  13.         '/logout''Logout',  
  14.         )  
  15. app = web.application(urls, globals())  
  16. #模板公共变量  
  17. t_globals = {  
  18.     'datestr': web.datestr,  
  19.     'cookie': web.cookies,  
  20. }  
  21. #指定模板目录,并设定公共模板  
  22. render = web.template.render('templates', base='base', globals=t_globals)  
  23. #创建登录表单  
  24. login = web.form.Form(  
  25.                       web.form.Textbox('username'),  
  26.                       web.form.Password('password'),  
  27.                       web.form.Button('login')  
  28.                       )  
  29. #首页类  
  30. class Index:  
  31.     def GET(self):  
  32.         login_form = login()  
  33.         posts = model.get_posts()  
  34.         return render.index(posts, login_form)  
  35.     def POST(self):  
  36.         login_form = login()  
  37.         if login_form.validates():  
  38.             if login_form.d.username == 'admin' /  
  39.                 and login_form.d.password == 'admin':  
  40.                 web.setcookie('username', login_form.d.username)  
  41.         raise web.seeother('/')  
  42. #查看文章类  
  43. class View:  
  44.     def GET(self, id):  
  45.         post = model.get_post(int(id))  
  46.         return render.view(post)  
  47. #新建文章类  
  48. class New:  
  49.     form = web.form.Form(  
  50.                          web.form.Textbox('title',  
  51.                          web.form.notnull,  
  52.                          size=30,  
  53.                          description='Post title: '),  
  54.                          web.form.Textarea('content',  
  55.                          web.form.notnull,  
  56.                          rows=30,  
  57.                          cols=80,  
  58.                          description='Post content: '),  
  59.                          web.form.Button('Post entry'),  
  60.                          )  
  61.     def GET(self):  
  62.         form = self.form()  
  63.         return render.new(form)  
  64.     def POST(self):  
  65.         form = self.form()  
  66.         if not form.validates():  
  67.             return render.new(form)  
  68.         model.new_post(form.d.title, form.d.content)  
  69.         raise web.seeother('/')  
  70. #删除文章类  
  71. class Delete:  
  72.     def POST(self, id):  
  73.         model.del_post(int(id))  
  74.         raise web.seeother('/')  
  75. #编辑文章类  
  76. class Edit:  
  77.     def GET(self, id):  
  78.         post = model.get_post(int(id))  
  79.         form = New.form()  
  80.         form.fill(post)  
  81.         return render.edit(post, form)  
  82.     def POST(self, id):  
  83.         form = New.form()  
  84.         post = model.get_post(int(id))  
  85.         if not form.validates():  
  86.             return render.edit(post, form)  
  87.         model.update_post(int(id), form.d.title, form.d.content)  
  88.         raise web.seeother('/')  
  89. #退出登录  
  90. class Logout:  
  91.     def GET(self):  
  92.         web.setcookie('username''', expires=-1)  
  93.         raise web.seeother('/')  
  94. #定义404错误显示内容  
  95. def notfound():  
  96.     return web.notfound("Sorry, the page you were looking for was not found.")  
  97.       
  98. app.notfound = notfound  
  99. #运行  
  100. if __name__ == '__main__':  
  101.     app.run()  
 

4、在主目录创建model.py,blog/model.py

[python] view plaincopy
  1. import web  
  2. import datetime  
  3. #数据库连接  
  4. db = web.database(dbn = 'mysql', db = 'test', user = 'root', pw = '123456')  
  5. #获取所有文章  
  6. def get_posts():  
  7.     return db.select('entries', order = 'id DESC')  
  8.       
  9. #获取文章内容  
  10. def get_post(id):  
  11.     try:  
  12.         return db.select('entries', where = 'id=$id', vars = locals())[0]  
  13.     except IndexError:  
  14.         return None  
  15. #新建文章  
  16. def new_post(title, text):  
  17.     db.insert('entries',  
  18.         title = title,  
  19.         content = text,  
  20.         posted_on = datetime.datetime.utcnow())  
  21. #删除文章  
  22. def del_post(id):  
  23.     db.delete('entries', where = 'id = $id', vars = locals())  
  24.       
  25. #修改文章  
  26. def update_post(id, title, text):  
  27.     db.update('entries',  
  28.         where = 'id = $id',  
  29.         vars = locals(),  
  30.         title = title,  
  31.         content = text)  
 

5、在模板目录依次创建:base.html、edit.html、index.html、new.html、view.html

[xhtml] view plaincopy
  1. <!-- base.html -->  
  2. $def with (page)  
  3. <html>  
  4.     <head>  
  5.         <title>My Blog</title>  
  6.         <mce:style><!--  
  7.             #menu {  
  8.                 width: 200px;  
  9.                 float: right;  
  10.             }  
  11.           
  12. --></mce:style><style mce_bogus="1">            #menu {  
  13.                 width: 200px;  
  14.                 float: right;  
  15.             }  
  16.         </style>  
  17.     </head>  
  18.       
  19.     <body>  
  20.         <ul id="menu">  
  21.             <li><a href="/" mce_href="">Home</a></li>  
  22.             $if cookie().get('username'):  
  23.                 <li><a href="/new" mce_href="new">New Post</a></li>  
  24.         </ul>  
  25.           
  26.         $:page  
  27.     </body>  
  28. </html>  
  29.   
  30. <!-- edit.html -->  
  31. $def with (post, form)  
  32. <h1>Edit $form.d.title</h1>  
  33. <form action="" method="post">  
  34.     $:form.render()  
  35. </form>  
  36. <h2>Delete post</h2>  
  37. <form action="/delete/$post.id" method="post">  
  38.     <input type="submit" value="Delete post" />  
  39. </form>  
  40.   
  41. <!-- index.html -->  
  42. $def with (posts, login_form)  
  43. <h1>Blog posts</h1>  
  44. $if not cookie().get('username'):  
  45.     <form action="" method="post">  
  46.     $:login_form.render()  
  47.     </form>  
  48. $else:  
  49.     Welcome $cookie().get('username')!<a href="/logout" mce_href="logout">Logout</a>  
  50. <ul>  
  51.     $for post in posts:  
  52.         <li>  
  53.             <a href="/view/$post.id" mce_href="view/$post.id">$post.title</a>  
  54.             on $post.posted_on  
  55.             $if cookie().get('username'):  
  56.                 <a href="/edit/$post.id" mce_href="edit/$post.id">Edit</a>  
  57.                 <a href="/delete/$post.id" mce_href="delete/$post.id">Del</a>  
  58.         </li>  
  59. </ul>  
  60.   
  61. <!-- new.html -->  
  62. $def with (form)  
  63. <h1>New Blog Post</h1>  
  64. <form action="" method="post">  
  65. $:form.render()  
  66. </form>  
  67.   
  68. <!-- view.html -->  
  69. $def with (post)  
  70. <h1>$post.title</h1>  
  71. $post.posted_on<br />  
  72. $post.content  
 

6、进入主目录在命令行下运行:python blog.py,将启动web服务,在浏览器输入:http://localhost:8080/,简易博客即已完成。

一、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”

[python] view plaincopy
  1. CREATE TABLE entries (    
  2.     id INT AUTO_INCREMENT,    
  3.     title TEXT,    
  4.     content TEXT,    
  5.     posted_on DATETIME,    
  6.     primary key (id)    
  7. );   
 

3、在主目录创建blog.py,blog/blog.py

[python] view plaincopy
  1. #载入框架  
  2. import web  
  3. #载入数据库操作model(稍后创建)  
  4. import model  
  5. #URL映射  
  6. urls = (  
  7.         '/''Index',  
  8.         '/view/(/d+)''View',  
  9.         '/new''New',  
  10.         '/delete/(/d+)''Delete',  
  11.         '/edit/(/d+)''Edit',  
  12.         '/login''Login',  
  13.         '/logout''Logout',  
  14.         )  
  15. app = web.application(urls, globals())  
  16. #模板公共变量  
  17. t_globals = {  
  18.     'datestr': web.datestr,  
  19.     'cookie': web.cookies,  
  20. }  
  21. #指定模板目录,并设定公共模板  
  22. render = web.template.render('templates', base='base', globals=t_globals)  
  23. #创建登录表单  
  24. login = web.form.Form(  
  25.                       web.form.Textbox('username'),  
  26.                       web.form.Password('password'),  
  27.                       web.form.Button('login')  
  28.                       )  
  29. #首页类  
  30. class Index:  
  31.     def GET(self):  
  32.         login_form = login()  
  33.         posts = model.get_posts()  
  34.         return render.index(posts, login_form)  
  35.     def POST(self):  
  36.         login_form = login()  
  37.         if login_form.validates():  
  38.             if login_form.d.username == 'admin' /  
  39.                 and login_form.d.password == 'admin':  
  40.                 web.setcookie('username', login_form.d.username)  
  41.         raise web.seeother('/')  
  42. #查看文章类  
  43. class View:  
  44.     def GET(self, id):  
  45.         post = model.get_post(int(id))  
  46.         return render.view(post)  
  47. #新建文章类  
  48. class New:  
  49.     form = web.form.Form(  
  50.                          web.form.Textbox('title',  
  51.                          web.form.notnull,  
  52.                          size=30,  
  53.                          description='Post title: '),  
  54.                          web.form.Textarea('content',  
  55.                          web.form.notnull,  
  56.                          rows=30,  
  57.                          cols=80,  
  58.                          description='Post content: '),  
  59.                          web.form.Button('Post entry'),  
  60.                          )  
  61.     def GET(self):  
  62.         form = self.form()  
  63.         return render.new(form)  
  64.     def POST(self):  
  65.         form = self.form()  
  66.         if not form.validates():  
  67.             return render.new(form)  
  68.         model.new_post(form.d.title, form.d.content)  
  69.         raise web.seeother('/')  
  70. #删除文章类  
  71. class Delete:  
  72.     def POST(self, id):  
  73.         model.del_post(int(id))  
  74.         raise web.seeother('/')  
  75. #编辑文章类  
  76. class Edit:  
  77.     def GET(self, id):  
  78.         post = model.get_post(int(id))  
  79.         form = New.form()  
  80.         form.fill(post)  
  81.         return render.edit(post, form)  
  82.     def POST(self, id):  
  83.         form = New.form()  
  84.         post = model.get_post(int(id))  
  85.         if not form.validates():  
  86.             return render.edit(post, form)  
  87.         model.update_post(int(id), form.d.title, form.d.content)  
  88.         raise web.seeother('/')  
  89. #退出登录  
  90. class Logout:  
  91.     def GET(self):  
  92.         web.setcookie('username''', expires=-1)  
  93.         raise web.seeother('/')  
  94. #定义404错误显示内容  
  95. def notfound():  
  96.     return web.notfound("Sorry, the page you were looking for was not found.")  
  97.       
  98. app.notfound = notfound  
  99. #运行  
  100. if __name__ == '__main__':  
  101.     app.run()  
 

4、在主目录创建model.py,blog/model.py

[python] view plaincopy
  1. import web  
  2. import datetime  
  3. #数据库连接  
  4. db = web.database(dbn = 'mysql', db = 'test', user = 'root', pw = '123456')  
  5. #获取所有文章  
  6. def get_posts():  
  7.     return db.select('entries', order = 'id DESC')  
  8.       
  9. #获取文章内容  
  10. def get_post(id):  
  11.     try:  
  12.         return db.select('entries', where = 'id=$id', vars = locals())[0]  
  13.     except IndexError:  
  14.         return None  
  15. #新建文章  
  16. def new_post(title, text):  
  17.     db.insert('entries',  
  18.         title = title,  
  19.         content = text,  
  20.         posted_on = datetime.datetime.utcnow())  
  21. #删除文章  
  22. def del_post(id):  
  23.     db.delete('entries', where = 'id = $id', vars = locals())  
  24.       
  25. #修改文章  
  26. def update_post(id, title, text):  
  27.     db.update('entries',  
  28.         where = 'id = $id',  
  29.         vars = locals(),  
  30.         title = title,  
  31.         content = text)  
 

5、在模板目录依次创建:base.html、edit.html、index.html、new.html、view.html

[xhtml] view plaincopy
  1. <!-- base.html -->  
  2. $def with (page)  
  3. <html>  
  4.     <head>  
  5.         <title>My Blog</title>  
  6.         <mce:style><!--  
  7.             #menu {  
  8.                 width: 200px;  
  9.                 float: right;  
  10.             }  
  11.           
  12. --></mce:style><style mce_bogus="1">            #menu {  
  13.                 width: 200px;  
  14.                 float: right;  
  15.             }  
  16.         </style>  
  17.     </head>  
  18.       
  19.     <body>  
  20.         <ul id="menu">  
  21.             <li><a href="/" mce_href="">Home</a></li>  
  22.             $if cookie().get('username'):  
  23.                 <li><a href="/new" mce_href="new">New Post</a></li>  
  24.         </ul>  
  25.           
  26.         $:page  
  27.     </body>  
  28. </html>  
  29.   
  30. <!-- edit.html -->  
  31. $def with (post, form)  
  32. <h1>Edit $form.d.title</h1>  
  33. <form action="" method="post">  
  34.     $:form.render()  
  35. </form>  
  36. <h2>Delete post</h2>  
  37. <form action="/delete/$post.id" method="post">  
  38.     <input type="submit" value="Delete post" />  
  39. </form>  
  40.   
  41. <!-- index.html -->  
  42. $def with (posts, login_form)  
  43. <h1>Blog posts</h1>  
  44. $if not cookie().get('username'):  
  45.     <form action="" method="post">  
  46.     $:login_form.render()  
  47.     </form>  
  48. $else:  
  49.     Welcome $cookie().get('username')!<a href="/logout" mce_href="logout">Logout</a>  
  50. <ul>  
  51.     $for post in posts:  
  52.         <li>  
  53.             <a href="/view/$post.id" mce_href="view/$post.id">$post.title</a>  
  54.             on $post.posted_on  
  55.             $if cookie().get('username'):  
  56.                 <a href="/edit/$post.id" mce_href="edit/$post.id">Edit</a>  
  57.                 <a href="/delete/$post.id" mce_href="delete/$post.id">Del</a>  
  58.         </li>  
  59. </ul>  
  60.   
  61. <!-- new.html -->  
  62. $def with (form)  
  63. <h1>New Blog Post</h1>  
  64. <form action="" method="post">  
  65. $:form.render()  
  66. </form>  
  67.   
  68. <!-- view.html -->  
  69. $def with (post)  
  70. <h1>$post.title</h1>  
  71. $post.posted_on<br />  
  72. $post.content  
 

6、进入主目录在命令行下运行:python blog.py,将启动web服务,在浏览器输入:http://localhost:8080/,简易博客即已完成。

0 0