设为首页 收藏本站
查看: 713|回复: 0

[经验分享] Python Web编程 :10分钟创建简易博客

[复制链接]

尚未签到

发表于 2017-5-5 10:08:51 | 显示全部楼层 |阅读模式
  转自: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 plaincopy


  • CREATETABLEentries(
  • idINTAUTO_INCREMENT,
  • titleTEXT,
  • contentTEXT,
  • posted_onDATETIME,
  • primarykey(id)
  • );

  3、在主目录创建blog.py,blog/blog.py
  
[python] view plaincopy


  • #载入框架
  • importweb
  • #载入数据库操作model(稍后创建)
  • importmodel
  • #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')
  • )
  • #首页类
  • classIndex:
  • defGET(self):
  • login_form=login()
  • posts=model.get_posts()
  • returnrender.index(posts,login_form)
  • defPOST(self):
  • login_form=login()
  • iflogin_form.validates():
  • iflogin_form.d.username=='admin'/
  • andlogin_form.d.password=='admin':
  • web.setcookie('username',login_form.d.username)
  • raiseweb.seeother('/')
  • #查看文章类
  • classView:
  • defGET(self,id):
  • post=model.get_post(int(id))
  • returnrender.view(post)
  • #新建文章类
  • classNew:
  • form=web.form.Form(
  • web.form.Textbox('title',
  • web.form.notnull,
  • size=30,
  • description='Posttitle:'),
  • web.form.Textarea('content',
  • web.form.notnull,
  • rows=30,
  • cols=80,
  • description='Postcontent:'),
  • web.form.Button('Postentry'),
  • )
  • defGET(self):
  • form=self.form()
  • returnrender.new(form)
  • defPOST(self):
  • form=self.form()
  • ifnotform.validates():
  • returnrender.new(form)
  • model.new_post(form.d.title,form.d.content)
  • raiseweb.seeother('/')
  • #删除文章类
  • classDelete:
  • defPOST(self,id):
  • model.del_post(int(id))
  • raiseweb.seeother('/')
  • #编辑文章类
  • classEdit:
  • defGET(self,id):
  • post=model.get_post(int(id))
  • form=New.form()
  • form.fill(post)
  • returnrender.edit(post,form)
  • defPOST(self,id):
  • form=New.form()
  • post=model.get_post(int(id))
  • ifnotform.validates():
  • returnrender.edit(post,form)
  • model.update_post(int(id),form.d.title,form.d.content)
  • raiseweb.seeother('/')
  • #退出登录
  • classLogout:
  • defGET(self):
  • web.setcookie('username','',expires=-1)
  • raiseweb.seeother('/')
  • #定义404错误显示内容
  • defnotfound():
  • returnweb.notfound("Sorry,thepageyouwerelookingforwasnotfound.")

  • app.notfound=notfound
  • #运行
  • if__name__=='__main__':
  • app.run()

  4、在主目录创建model.py,blog/model.py
  
[python] view plaincopy


  • importweb
  • importdatetime
  • #数据库连接
  • db=web.database(dbn='mysql',db='test',user='root',pw='123456')
  • #获取所有文章
  • defget_posts():
  • returndb.select('entries',order='idDESC')

  • #获取文章内容
  • defget_post(id):
  • try:
  • returndb.select('entries',where='id=$id',vars=locals())[0]
  • exceptIndexError:
  • returnNone
  • #新建文章
  • defnew_post(title,text):
  • db.insert('entries',
  • title=title,
  • content=text,
  • posted_on=datetime.datetime.utcnow())
  • #删除文章
  • defdel_post(id):
  • db.delete('entries',where='id=$id',vars=locals())

  • #修改文章
  • defupdate_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
  
[xhtml] view plaincopy


  • <!--base.html-->
  • $defwith(page)
  • <html>
  • <head>
  • <title>MyBlog</title>
  • <mce:style><!--
  • #menu{
  • width:200px;
  • float:right;
  • }

  • --></mce:style><stylemce_bogus="1">#menu{
  • width:200px;
  • float:right;
  • }
  • </style>
  • </head>

  • <body>
  • <ulid="menu">
  • <li><ahref="/"mce_href="">Home</a></li>
  • $ifcookie().get('username'):
  • <li><ahref="/new"mce_href="new">NewPost</a></li>
  • </ul>

  • $:page
  • </body>
  • </html>

  • <!--edit.html-->
  • $defwith(post,form)
  • <h1>Edit$form.d.title</h1>
  • <formaction=""method="post">
  • $:form.render()
  • </form>
  • <h2>Deletepost</h2>
  • <formaction="/delete/$post.id"method="post">
  • <inputtype="submit"value="Deletepost"/>
  • </form>

  • <!--index.html-->
  • $defwith(posts,login_form)
  • <h1>Blogposts</h1>
  • $ifnotcookie().get('username'):
  • <formaction=""method="post">
  • $:login_form.render()
  • </form>
  • $else:
  • Welcome$cookie().get('username')!<ahref="/logout"mce_href="logout">Logout</a>
  • <ul>
  • $forpostinposts:
  • <li>
  • <ahref="/view/$post.id"mce_href="view/$post.id">$post.title</a>
  • on$post.posted_on
  • $ifcookie().get('username'):
  • <ahref="/edit/$post.id"mce_href="edit/$post.id">Edit</a>
  • <ahref="/delete/$post.id"mce_href="delete/$post.id">Del</a>
  • </li>
  • </ul>

  • <!--new.html-->
  • $defwith(form)
  • <h1>NewBlogPost</h1>
  • <formaction=""method="post">
  • $:form.render()
  • </form>

  • <!--view.html-->
  • $defwith(post)
  • <h1>$post.title</h1>
  • $post.posted_on<br/>
  • $post.content

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373315-1-1.html 上篇帖子: Python编写的ssh客户端[类似putty] 下篇帖子: [译]用python来玩转Volume Shadow copies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表