Python Web编程 :10分钟创建简易博客

转自:http://blog.csdn.net/caleng/article/details/5712850


一、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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  1.   
  2. $def with (page)  
  3. <html>  
  4.     <head>  
  5.         <title>My Blogtitle>  
  6.         <mce:style>  
  7. $def with (post, form)  
  8. <h1>Edit $form.d.titleh1>  
  9. <form action="" method="post">  
  10.     $:form.render()  
  11. form>  
  12. <h2>Delete posth2>  
  13. <form action="/delete/$post.id" method="post">  
  14.     <input type="submit" value="Delete post" />  
  15. form>  
  16.   
  17.   
  18. $def with (posts, login_form)  
  19. <h1>Blog postsh1>  
  20. $if not cookie().get('username'):  
  21.     <form action="" method="post">  
  22.     $:login_form.render()  
  23.     form>  
  24. $else:  
  25.     Welcome $cookie().get('username')!<a href="/logout" mce_href="logout">Logouta>  
  26. <ul>  
  27.     $for post in posts:  
  28.         <li>  
  29.             <a href="/view/$post.id" mce_href="view/$post.id">$post.titlea>  
  30.             on $post.posted_on  
  31.             $if cookie().get('username'):  
  32.                 <a href="/edit/$post.id" mce_href="edit/$post.id">Edita>  
  33.                 <a href="/delete/$post.id" mce_href="delete/$post.id">Dela>  
  34.         li>  
  35. ul>  
  36.   
  37.   
  38. $def with (form)  
  39. <h1>New Blog Posth1>  
  40. <form action="" method="post">  
  41. $:form.render()  
  42. form>  
  43.   
  44.   
  45. $def with (post)  
  46. <h1>$post.titleh1>  
  47. $post.posted_on<br />  
  48. $post.content  
 

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

你可能感兴趣的:(python)