基于Linux环境的Web.py框架介绍

前言

在文章《基于Linux环境搭建Nginx+uWSGI+Python框架方法介绍》中介绍了客户端和Web服务器的交互过程,Web服务器接收客户端的请求后,由Web应用服务器对浏览器的请求进行处理,将生成的响应传递给Web服务器,再由Web服务器返回给客户端。为了简化Web网站的开发,使开发者可以专注于编写业务逻辑代码而无需关心Web应用服务器内各模块连接之类的重复性工作,继而在Web应用服务器上产生了Web框架。一般Web框架的架构如下图所示,基于Python的Web框架如Django、tornado、flask、webpy等都在这个范围内进行不同的调整。

图片描述


MVC模式

MVC是众所周知的Web框架设计模式,即将应用程序分解成model(模型)、view(视图)和 controller(控制器)三个组成部分。用户输入 URL,客户端发送请求,控制器(Controller)首先会拿到请求,然后用模型(Models)从数据库取出所有需要的数据进行必要的处理,将处理后的结果发送给视图(View),视图利用获取到的数据进行渲染生成 Html返回给客户端。MVC设计模式将业务逻辑、数据、界面显示分离,业务逻辑聚集到一个模块中,使得在更改界面时无需重新编写业务逻辑,提高网站的维护性。

图片描述


Web.py框架

相较与大而全的Django框架来说非常轻量级的开源Python Web框架Web.py,它小巧灵活、简单并且强大,在使用时没有任何限制。目前Web.py被广泛运用于大型网站,如西班牙的社交网站Frinki、主页日平均访问量达7000万次的Yandex等。下面通过Get和Post实现例程来介绍下Web.py的应用。

1) web.py的安装

web.py下载地址:http://webpy.org/static/web.p...。解压并拷贝web.py-0.38文件夹到目录下运行:

python setup.py install(sudo python setup.py install)

图片描述

2)Python例程——GET

在Web.py中URL的请求映射于urls元组中,元组结构第一部分为匹配URL的正则表达式,第二部分为接受请求的类名称。app= web.application(urls, globals())创建一个列举URL列表的应用,该应用会在文件的全局命名空间中查找对应类。如'/'完全匹配URLhttp://0.0.0.0:8080/;'/task/d'匹配'/task/'开头而后为任意1个数字的URL;'/(.*)'匹配'/'后任意内容作为参数返回,类中需有参数接收。

在Html代码中使用了Web.py支持的模板引擎Templetor,模板引擎的用途是使界面与数据分离,界面模板经过模板引擎的渲染后会生成最终的界面文件。如第一行$def with (name)定义了一个变量name;$name会用name的值来替换。

templates目录下存放.html模板文件,render = web.template.render('templates/') 生成render会从模板目录查找文件,render.hello(..)表示渲染 hello.html 模板。

当然Web.py也支持使用Jinja2模板引擎,由于Jinja2属于第三方库需要单独安装,在py文件中执行render = render_jinja('templates',encoding = 'utf-8')更换为Jinja2模板引擎,在html文件中可按照Jinja2支持的语法进行编写,这样就能使用jinja2模板引擎进行渲染。

Python代码:

import web 
render = web.template.render('templates/') 

urls = ( 
    '/',     'hello', #完全匹配
    '/task/\d', 'task', #模糊匹配
    '/(.*)',     'anyd'    #带组匹配 正则表达式(.*)匹配/后任意内容并作为参数返回,类中需有参数接收
) 

class anyd: 
    def GET(self,name): 
        i=web.input(name=None) 
        return render.index(name) 

class hello:
    def GET(self):
        return "Hello, world!"

class task:
    def GET(self):
        name='Bob'
        return render.index(name)

if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run()

html代码:

$def with (name)#定义了一个变量 name
$if name:
    I just wanted to say <em>hello</em> to $name.
$else:
    <em>Hello</em>, world!

将py文件保存为mywebpy.py,web.py内置了web服务器,运行后显示http://0.0.0.0:8080/即启动了服务器。在浏览器中输入http://127.0.0.1:8080会显示Hello,world!,在浏览器中输入http://127.0.0.1:8080/task/1会显示I just wanted to say hello to Bob, 在浏览器中输入http://127.0.0.1:8080/Tom显示I just wanted to say hello to Tom

图片描述

注:在调试中ps查看web服务器进程ID,kill当前进程后才能重新启动服务器,否则会提示No socket could be created错误

图片描述

3) Python例程——POST

Web.py中'web.form'模块支持表单的创建、校验和显示。该模块包含一个'Form'对象和各种输入框类如Textbox、Password 、Textarea 、Dropdown、Radio、Checkbox、Button等。 Form对象的validates方法可以验证Form对象中inputs是否有效。只有调用了validates方法,Form对象的各个inputs才会有相应的值,否则其值均为None。validates方法内部默认会使用web.input()来作为数据来源去验证,也可以使用source参数指定数据来源。同样可以使用Form对象中Validator来校验表单。以下例程中在填写表格Post提交后,如果password和password_again值相同,那么会显示'HAHA!',否则显示'Try again, Passwords didn't match:'。

Python代码:

import web,os
from web import form
render = web.template.render("templates")
urls = (
    '/', 'index',
)
app = web.application(urls, globals())

login = form.Form(
    form.Textbox('username'),
    form.Password('password'),
    form.Password('password_again'),
    form.Checkbox('YES'),
    form.Checkbox('NO'),
    form.Textarea('Moe'),
    form.Dropdown('SEX', ['man', 'woman']),
    form.Radio('time',['2012-01-01','20120101']),        
    form.Button('Login'),
    validators = [form.Validator("Passwords didn't match.", lambda i: i.password == i.password_again)]
)
   
class index:

    def GET(self):
        f=login()
        return render.formtest(f)
    def POST(self):
        f=login()
        if not f.validates():
            return render.formtest(f)

        else:
            return "HAHA!"

if __name__ == "__main__":
    web.internalerror = web.debugerror
    app.run()

html代码:


$def with (form)
<form name="main" method="post"> 
$if not form.valid: <p class="error">Try again,Passwords didn't match:</p>
$:form.render()
<input type="submit" /></form>

图片描述

图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webadmin!是一个免费的开源框架,用于为Linux系统的快速搭建统一、稳定、易用的Web管理系统。 WebAdmin系统由三部分组成:WEB图形用户接口、WebAdmin守护进程和进程监视程序。Web图形用户接口(WebGUI)是WebAdmin系统的前端部分,为用户提供一个统一、易操作的图形界面。WebAdmin守护进程 (WebAdmind)是WebAdmin系统的后台部分,实时监视WebGUI生成的配置文件,并根据配置文件的变化情况,启动或停止相应的服务进程,WebAdmin进程监视程序(DaemonWatcher)用于实时监视WebAdmind启动的服务进程的运行状况,一旦发现启动的服务进程异常中止,立即重启中止的服务进程,从而确保系统可靠稳定运行。 WebAdmin!提供了一个结构化的WebAdmin开发框架,它的前后台部分均采用插件式的程序开发方法,借助提供的插件开发模板,WebAdmin系统开发者不必关WebAdmin开发框架的具体实现,就可设计出界面统一、操作简单、安全稳定的WebGUI界面。与WebGUI相对应,Webadmind也是采用插件式的程序开发方法。WebAdmind插件与WebGUI插件一一对应完成对界面操作的响应。DaemonWatcher是一个独立的进程监视程序,是为确保WebAdmind启动的进程能够不可间断地提供服务,一旦发现被监视程序发生异常中止,DaemonWatcher将根据进程的启动脚本立即启动被中止进程。 WebAdmin是一个用C语言设计的易用的图形用户接口开发框架,C语言的高可移植性使得WebAdmin可以广泛应用于包括Linux、Unix、Windows及各种嵌入式操作系统中,编译WebAdmin系统除Libxml2库处不需要额外的C函数库支持。WebAdmin提供了丰富的API函数,开发者可以根据自己的需要定制个性化的WebAdmin系统。 WebAdmin系统的界面风格也可以自己定制,对于OEM厂商可以根据需要修改界面风格,满足定制要求。 WebAdmin的开放设计思想,为WebAdmin系统的不断发展普奠定了基础,无数开发者提供了开源插件模块,用户甚至不用写一行代码就可根据自己的需要设计WebAdmin系统。 【简单使用方法】:下载后将压缩文件上传到Linux系统中,用tar xvfz webadmin-devel-1.3.tar.gz解压,解压后进入webadmin-devel目录,执行./configure,make命令后将会在test/webui目录下生成一个webadmin.cgi文件,将此文件拷贝到apache下的WEB根目录下cgi-bin目录下即可,为测试webadmin.cgi,还需将htdocs目录下的文件拷贝到apache的WEB根目录下,将etc目录中的所有文件拷贝到根目录下的etc中,最后用浏览器访问你的apache Web服务器即可看到Linux系统的WEB管理界面。 【说明】:编译此源码需要libxml2库的支持 有技术问题可以访问官方网站:http://www.webadminc.com,联系电话:13311223928
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值