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

本文介绍如何利用轻量级Python Web框架web.py快速搭建一个包含登录验证、增删改查等功能的个人博客系统。

转自:http://blog.youkuaiyun.com/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. CREATETABLEentries(
  2. idINTAUTO_INCREMENT,
  3. titleTEXT,
  4. contentTEXT,
  5. posted_onDATETIME,
  6. primarykey(id)
  7. );

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

[python] view plain copy
  1. #载入框架
  2. importweb
  3. #载入数据库操作model(稍后创建)
  4. importmodel
  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. classIndex:
  31. defGET(self):
  32. login_form=login()
  33. posts=model.get_posts()
  34. returnrender.index(posts,login_form)
  35. defPOST(self):
  36. login_form=login()
  37. iflogin_form.validates():
  38. iflogin_form.d.username=='admin'/
  39. andlogin_form.d.password=='admin':
  40. web.setcookie('username',login_form.d.username)
  41. raiseweb.seeother('/')
  42. #查看文章类
  43. classView:
  44. defGET(self,id):
  45. post=model.get_post(int(id))
  46. returnrender.view(post)
  47. #新建文章类
  48. classNew:
  49. form=web.form.Form(
  50. web.form.Textbox('title',
  51. web.form.notnull,
  52. size=30,
  53. description='Posttitle:'),
  54. web.form.Textarea('content',
  55. web.form.notnull,
  56. rows=30,
  57. cols=80,
  58. description='Postcontent:'),
  59. web.form.Button('Postentry'),
  60. )
  61. defGET(self):
  62. form=self.form()
  63. returnrender.new(form)
  64. defPOST(self):
  65. form=self.form()
  66. ifnotform.validates():
  67. returnrender.new(form)
  68. model.new_post(form.d.title,form.d.content)
  69. raiseweb.seeother('/')
  70. #删除文章类
  71. classDelete:
  72. defPOST(self,id):
  73. model.del_post(int(id))
  74. raiseweb.seeother('/')
  75. #编辑文章类
  76. classEdit:
  77. defGET(self,id):
  78. post=model.get_post(int(id))
  79. form=New.form()
  80. form.fill(post)
  81. returnrender.edit(post,form)
  82. defPOST(self,id):
  83. form=New.form()
  84. post=model.get_post(int(id))
  85. ifnotform.validates():
  86. returnrender.edit(post,form)
  87. model.update_post(int(id),form.d.title,form.d.content)
  88. raiseweb.seeother('/')
  89. #退出登录
  90. classLogout:
  91. defGET(self):
  92. web.setcookie('username','',expires=-1)
  93. raiseweb.seeother('/')
  94. #定义404错误显示内容
  95. defnotfound():
  96. returnweb.notfound("Sorry,thepageyouwerelookingforwasnotfound.")
  97. app.notfound=notfound
  98. #运行
  99. if__name__=='__main__':
  100. app.run()

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

[python] view plain copy
  1. importweb
  2. importdatetime
  3. #数据库连接
  4. db=web.database(dbn='mysql',db='test',user='root',pw='123456')
  5. #获取所有文章
  6. defget_posts():
  7. returndb.select('entries',order='idDESC')
  8. #获取文章内容
  9. defget_post(id):
  10. try:
  11. returndb.select('entries',where='id=$id',vars=locals())[0]
  12. exceptIndexError:
  13. returnNone
  14. #新建文章
  15. defnew_post(title,text):
  16. db.insert('entries',
  17. title=title,
  18. content=text,
  19. posted_on=datetime.datetime.utcnow())
  20. #删除文章
  21. defdel_post(id):
  22. db.delete('entries',where='id=$id',vars=locals())
  23. #修改文章
  24. defupdate_post(id,title,text):
  25. db.update('entries',
  26. where='id=$id',
  27. vars=locals(),
  28. title=title,
  29. content=text)

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

[xhtml] view plain copy
  1. <!--base.html-->
  2. $defwith(page)
  3. <html>
  4. <head>
  5. <title>MyBlog</title>
  6. <mce:style><!--
  7. #menu{
  8. width:200px;
  9. float:right;
  10. }
  11. --></mce:style><stylemce_bogus="1">#menu{
  12. width:200px;
  13. float:right;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <ulid="menu">
  19. <li><ahref="/"mce_href="">Home</a></li>
  20. $ifcookie().get('username'):
  21. <li><ahref="/new"mce_href="new">NewPost</a></li>
  22. </ul>
  23. $:page
  24. </body>
  25. </html>
  26. <!--edit.html-->
  27. $defwith(post,form)
  28. <h1>Edit$form.d.title</h1>
  29. <formaction=""method="post">
  30. $:form.render()
  31. </form>
  32. <h2>Deletepost</h2>
  33. <formaction="/delete/$post.id"method="post">
  34. <inputtype="submit"value="Deletepost"/>
  35. </form>
  36. <!--index.html-->
  37. $defwith(posts,login_form)
  38. <h1>Blogposts</h1>
  39. $ifnotcookie().get('username'):
  40. <formaction=""method="post">
  41. $:login_form.render()
  42. </form>
  43. $else:
  44. Welcome$cookie().get('username')!<ahref="/logout"mce_href="logout">Logout</a>
  45. <ul>
  46. $forpostinposts:
  47. <li>
  48. <ahref="/view/$post.id"mce_href="view/$post.id">$post.title</a>
  49. on$post.posted_on
  50. $ifcookie().get('username'):
  51. <ahref="/edit/$post.id"mce_href="edit/$post.id">Edit</a>
  52. <ahref="/delete/$post.id"mce_href="delete/$post.id">Del</a>
  53. </li>
  54. </ul>
  55. <!--new.html-->
  56. $defwith(form)
  57. <h1>NewBlogPost</h1>
  58. <formaction=""method="post">
  59. $:form.render()
  60. </form>
  61. <!--view.html-->
  62. $defwith(post)
  63. <h1>$post.title</h1>
  64. $post.posted_on<br/>
  65. $post.content

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值