web.py 十分钟创建简易博客

简介: 来源:http://blog.csdn.net/caleng/article/details/5712850 一、web.py简介 web.py是一款轻量级的Python web开发框架,简单、高效、学习成本低,特别适合作为python web开发的入门框架。官方站点:http://webpy.org/ 二、web.py安装 1、下载:http:

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


目录
相关文章
|
4月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
42 0
|
6月前
|
前端开发 安全 数据安全/隐私保护
Web实战丨基于django+html+css+js的在线博客网站
Web实战丨基于django+html+css+js的在线博客网站
105 2
|
7月前
|
存储 数据库连接 数据安全/隐私保护
使用Python和Flask构建一个简单的Web博客应用
使用Python和Flask构建一个简单的Web博客应用
75 0
|
7月前
|
应用服务中间件 数据库 nginx
Python Web开发实战:从搭建博客到部署上线
使用Python和Flask初学者指南:从搭建简单博客到部署上线。文章详细介绍了如何从零开始创建一个博客系统,包括准备Python环境、使用Flask和SQLite构建应用、设计数据库模型、创建视图函数和HTML模板,以及整合所有组件。最后,简述了如何通过Gunicorn和Nginx将应用部署到Linux服务器。
|
测试技术 容器
Flutter Web网站之Markdown展示与博客列表
Flutter Web网站之Markdown展示与博客列表
242 0
Flutter Web网站之Markdown展示与博客列表
|
Web App开发 Dart 安全
flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS
Flutter Blog Theme using Flutter | Web, macOS, Android, iOS Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web、macOS、Android 和 iOS。 这就是为什么今天我们使用在 Web、macOS 应用、Android 和 iOS 应用上运行的 flutter 创建响应式博客主题。 此外,我们创建了一个具有自定义悬停动画的动画网络菜单。 最后,您将学习如何使用 Flutter 制作响应式应用程序。
395 0
|
弹性计算 小程序 安全
基于云服务器部署nginx开发环境(新同学搭建Web系统/博客网站)
大家好,今天为大讲解如何搭建自己的和通数据库服务环境,也是笔者踩坑一天所获,希望对大家有所帮助。 无论是搭建个人博客空间也好,小程序也罢,搭建环境必需的两点:云服务器、域名,下面一步步给搭建演示如果在一台和通数据库服务器上搭建小程序服务端环境。
960 0
基于云服务器部署nginx开发环境(新同学搭建Web系统/博客网站)
|
弹性计算 小程序 安全
云服务器如何部署nginx开发环境(搭建Web系统/博客网站)【新同学指导】
注:以下配置仅是个人根据经验推荐,在实际配置过程中,我们还可以多听听自己的程序和技术开发人员推荐的配置。选择云产品之前先领取最高价值2000代金券以减少上云成本
730 0
云服务器如何部署nginx开发环境(搭建Web系统/博客网站)【新同学指导】
|
弹性计算 小程序 安全
基于云服务器部署nginx开发环境(搭建Web系统/博客网站)
基于云服务器部署nginx开发环境(搭建Web系统/博客网站)
1176 0
基于云服务器部署nginx开发环境(搭建Web系统/博客网站)
|
Web App开发 人工智能 Python
[python作业AI毕业设计博客]深入理解Flask 中英文版-英文更新至2018第2版 Mastering Flask Web Development 2nd Edition - 2018.Pdf
深入理解Flask - 2016.pdf Flask 是在Python 用户中最为流行的Web 开发框架。《深入理解 Flask》从一个简单的Flask 项目入手,由浅入深地探讨了一系列实战问题,包括如何使用SQLAlchemy 和Jinja 等工具进行Web 开发;如何正确地设计扩展性强的Fl.