From: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”

CREATE TABLE entries (    id INT AUTO_INCREMENT,    title TEXT,    content TEXT,    posted_on DATETIME,    primary key (id)
);   

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

#载入框架
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

import web
import datetime
#数据库连接
db = web.database(dbn = '<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>', 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

<!-- 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/,简易博客即已完成。

web.py 十分钟创建简易博客相关推荐

  1. 简单十步创建个人博客网站

    超详细搭建wordpress个人博客教程 本人也是刚建好,操作超级简单 1.首先是域名 直接使用免费虚拟主机https://profreehost.com 打开直接注册就行,点击客户专区 1.1点击添 ...

  2. 创建hugo博客_Hugo + Firebase:如何在几分钟内免费创建自己的静态网站

    创建hugo博客 by Aravind Putrevu 通过Aravind Putrevu Hugo + Firebase:如何在几分钟内免费创建自己的静态网站 (Hugo + Firebase: H ...

  3. md 生成目录 码云_搭建简易博客方案

    现在大家都喜欢用markdown来写技术博客,这篇文章将阐述搭建支持markdown的简易博客方法. 我的写作需求 通过阅读本文,您将学会搭建满足以下条件的博客: 博客只用书写markdown文件 能 ...

  4. 推荐:2010年度十大杰出IT博客

    IT博客作为一种专业性博客,已成为IT发展过程中一个不可或缺的重要角色,广大的IT博主,无私分享最技术内容,彰显了互联网奉献精神,影响着中国IT界的发展进程.本次大赛,旨在评选2010年度,在推动中国 ...

  5. rails官方指南--建一个简易博客

    写这篇博客的原因是国科大高级软件工程(罗老师的课)需要用ruby on rails,在rails入门时,rails官方指南(建一个简易博客)的英文读着吃力所以想一边翻译该指南,一边学习,中间因为有考试 ...

  6. 2010年度十大杰出IT博客

    转自http://blog.vsharing.com/zhoujg/A1311595.html 推荐:2010年度十大杰出IT博客 IT博客作为一种专业性博客,已成为IT发展过程中一个不可或缺的重要角 ...

  7. (收藏)2010年度十大杰出IT博客

    IT博客作为一种专业性博客,已成为IT发展过程中一个不可或缺的重要角色,广大的IT博主,无私分享最技术内容,彰显了互联网奉献精神,影响着中国IT界的发展进程.本次大赛,旨在评选2010年度,在推动中国 ...

  8. 第十四次ScrumMeeting博客

    第十四次ScrumMeeting博客 本次会议于12月3日(日)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰.张安澜.方科栋. 1. 每个人的工作(有Issue的内容和链接) ...

  9. 2011年度十大杰出IT博客获奖感言

        2011年度十大杰出IT博客获奖感言 在各位评委.网友的支持下,我的博客从前50名中脱颖而出跻身10强,得到这个消息之后心中充满了喜悦.在这里要感谢51CTO为大家提供这样一个良好的展示平台. ...

最新文章

  1. 用 Linux 命令玩一个有趣的数学游戏
  2. 什么水平能做java中级工程师,挑战大厂重燃激情!
  3. OpenCV角点检测之Harris角点检测
  4. visual studio中导入opencv的项目
  5. SwiftUI3.0封装Lottie动画库
  6. css 大于号 标签_CSS设计基础选择器篇
  7. 境内外赌博网站被捣毁,程序员被抓!!
  8. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 角色权限的配置页面改进优化...
  9. 2017.10.26 星际贸易 思考记录
  10. (十七)Java springcloud B2B2C o2o多用户商城 springcloud架构-消息驱动 Spring Cloud Stream...
  11. WM_SIZING 使用说明
  12. 关系代数笛卡尔积和自然连接的例子
  13. 股票控件android,一个Android股票应用(含源码)
  14. Spring aop+自定义注解统一记录用户行为日志
  15. 文墨绘学:情绪的根源——家长的不合理观念
  16. 券业零售业务转型方向已显现?从打造个人IP开始
  17. 基于ssm流浪猫狗|流浪狗宠物救助网站
  18. Confluence 你可以对编辑器中的表格进行什么样的操作
  19. 无水磷酸三钠行业调研报告 - 市场现状分析与发展前景预测
  20. 数学家西蒙斯:华尔街最赚钱的基金经理

热门文章

  1. 最全MySQL面试60题和答案
  2. 领域应用 | 人工智能+知识图谱:如何规整海量金融大数据?
  3. 爬取词库,使用jieba分词库,自定义dict.txt文件+将搜狗词库.scel文件为.txt文件
  4. 网络版ATM项目的实现——客户端
  5. SpringBoot RequestBody ajax提交对象
  6. 记使用talend从oracle抽取数据时,数字变为0的问题
  7. 是否同一棵二叉搜索树
  8. SQL Server数据库大型应用解决方案总结【转】
  9. tomcat server.xml配置详解
  10. jwplayer 消除logo