web.py 十分钟创建简易博客
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 十分钟创建简易博客相关推荐
- 简单十步创建个人博客网站
超详细搭建wordpress个人博客教程 本人也是刚建好,操作超级简单 1.首先是域名 直接使用免费虚拟主机https://profreehost.com 打开直接注册就行,点击客户专区 1.1点击添 ...
- 创建hugo博客_Hugo + Firebase:如何在几分钟内免费创建自己的静态网站
创建hugo博客 by Aravind Putrevu 通过Aravind Putrevu Hugo + Firebase:如何在几分钟内免费创建自己的静态网站 (Hugo + Firebase: H ...
- md 生成目录 码云_搭建简易博客方案
现在大家都喜欢用markdown来写技术博客,这篇文章将阐述搭建支持markdown的简易博客方法. 我的写作需求 通过阅读本文,您将学会搭建满足以下条件的博客: 博客只用书写markdown文件 能 ...
- 推荐:2010年度十大杰出IT博客
IT博客作为一种专业性博客,已成为IT发展过程中一个不可或缺的重要角色,广大的IT博主,无私分享最技术内容,彰显了互联网奉献精神,影响着中国IT界的发展进程.本次大赛,旨在评选2010年度,在推动中国 ...
- rails官方指南--建一个简易博客
写这篇博客的原因是国科大高级软件工程(罗老师的课)需要用ruby on rails,在rails入门时,rails官方指南(建一个简易博客)的英文读着吃力所以想一边翻译该指南,一边学习,中间因为有考试 ...
- 2010年度十大杰出IT博客
转自http://blog.vsharing.com/zhoujg/A1311595.html 推荐:2010年度十大杰出IT博客 IT博客作为一种专业性博客,已成为IT发展过程中一个不可或缺的重要角 ...
- (收藏)2010年度十大杰出IT博客
IT博客作为一种专业性博客,已成为IT发展过程中一个不可或缺的重要角色,广大的IT博主,无私分享最技术内容,彰显了互联网奉献精神,影响着中国IT界的发展进程.本次大赛,旨在评选2010年度,在推动中国 ...
- 第十四次ScrumMeeting博客
第十四次ScrumMeeting博客 本次会议于12月3日(日)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰.张安澜.方科栋. 1. 每个人的工作(有Issue的内容和链接) ...
- 2011年度十大杰出IT博客获奖感言
2011年度十大杰出IT博客获奖感言 在各位评委.网友的支持下,我的博客从前50名中脱颖而出跻身10强,得到这个消息之后心中充满了喜悦.在这里要感谢51CTO为大家提供这样一个良好的展示平台. ...
最新文章
- 用 Linux 命令玩一个有趣的数学游戏
- 什么水平能做java中级工程师,挑战大厂重燃激情!
- OpenCV角点检测之Harris角点检测
- visual studio中导入opencv的项目
- SwiftUI3.0封装Lottie动画库
- css 大于号 标签_CSS设计基础选择器篇
- 境内外赌博网站被捣毁,程序员被抓!!
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 角色权限的配置页面改进优化...
- 2017.10.26 星际贸易 思考记录
- (十七)Java springcloud B2B2C o2o多用户商城 springcloud架构-消息驱动 Spring Cloud Stream...
- WM_SIZING 使用说明
- 关系代数笛卡尔积和自然连接的例子
- 股票控件android,一个Android股票应用(含源码)
- Spring aop+自定义注解统一记录用户行为日志
- 文墨绘学:情绪的根源——家长的不合理观念
- 券业零售业务转型方向已显现?从打造个人IP开始
- 基于ssm流浪猫狗|流浪狗宠物救助网站
- Confluence 你可以对编辑器中的表格进行什么样的操作
- 无水磷酸三钠行业调研报告 - 市场现状分析与发展前景预测
- 数学家西蒙斯:华尔街最赚钱的基金经理