web.py

先配置好python的路径,如果搞过java的配置,python简直小菜一碟,如果linux操作系统找得到$PATH和模块就行了,windows下就环境变量自己用户跟java一样配置下PATH和Lib目录即可

配置PATH是为了能找到python可执行程序,Lib的话是因为windows下安装模块会安装到python的目录的Lib目录中

1:首先下载web.py,下面是github链接

https://codeload.github.com/webpy/webpy/zip/webpy-0.37

2:安装,easy,windows下cmd或者cygwin都可以

python setup.py install

安装完之后,通过python交互import web试试,不行请重新来过~!

 

下面code这里我是通过Notepad++结合NppExec插件运行

假如想在本地页面输出hello world,只需要

import web

urls = ('/.*', 'lihui',)

class lihui(object):
    def GET(self):
        return 'hello world'

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

浏览器只需要输入http://127.0.0.1:8080 或者 http://127.0.0.1:8080/*&^( 均可输出打印hello world

首先application是一个类,在application.py里面可以找到定义

class application:
    """
......
    """
    def __init__(self, mapping=(), fvars={}, autoreload=None):

这里初始化传进去了两个参数urls和globals(),从__init__参数造型来看urls应该就是一个元组,globals()应该会返回一个字典

这里url元组的定义是由一个路径和一个处理类组成

路径就是URL里去除HOST后面的玩意,比如http://lihuia.com/lihui,前面的是HOST,/lihui就是路径了,urls元组的第一个元素就是通过正则表达式来匹配这个路径

处理类简单地讲就是定义了一些方法,或者说是HTTP里面的一些method,GET,POST等,当有人发出GET请求,这个类里的GET方法就会被调用,从而打印信息

其实这里还有,我查看了下元组第一个参数正则表达式,其实可以是python里组合匹配group匹配出想要的信息,然后作为参数传到处理类的方法里,最后有例子

返回的app实际上就是一个应用对象,调用run方法才会启动写的应用,进而执行上面的,但是很奇怪,我并没有安装nginx或者apache等web server,说明可能已经内置了一个,直接查找run方法

  def run(self, *middleware):
        """
        Starts handling requests. If called in a CGI or FastCGI context, it will follow
        that protocol. If called from the command line, it will start an HTTP
        server on the port named in the first command line argument, or, if there
        is no argument, on port 8080.

        `middleware` is a list of WSGI middleware which is applied to the resulting WSGI
        function.
        """
        return wsgi.runwsgi(self.wsgifunc(*middleware))

按这个说明,执行run方法,会启动web server以及默认端口是8080,为了继续找找web server,查看下runwsgi方法

def runwsgi(func):
    """
......

    return httpserver.runsimple(func, validip(listget(sys.argv, 1, '')))

中间的各种分支结构就不看了,直接看最后一个return,查看runsimple方法

def runsimple(func, server_address=("0.0.0.0", 8080)):
    """
    Runs [CherryPy][cp] WSGI server hosting WSGI app `func`.
    The directory `static/` is hosted statically.

    [cp]: http://www.cherrypy.org
    """
    global server
    func = StaticMiddleware(func)
    func = LogMiddleware(func)

    server = WSGIServer(server_address, func)

    if server.ssl_adapter:
        print "https://%s:%d/" % server_address
    else:
        print "http://%s:%d/" % server_address

    try:
        server.start()
    except (KeyboardInterrupt, SystemExit):
        server.stop()
        server = None

从这个函数可以看到,web.py里的确内置了一个web server,并且是在调用run方法的时候开启的,默认端口为8080

 

最后就是刚说的,元组第一个参数正则表达式可以将部分内容作为参数传入到GET方法中,比如下面的例子,匹配出我的姓氏,然后传到GET方法中

import web

urls = ('/(.*)hui/*', 'lihui',)

class lihui(object):
    def GET(self, sex):
        return "lihui's sex is %s" %sex

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

浏览器输入http://127.0.0.1:8080/lihui,输出的结果为:

lihui's sex is li

发表回复