当前位置:C++技术网 > 精选软件 > 云平台开发架构分析系列:21 Nginx+uWSGI+webpy环境搭建实践3

云平台开发架构分析系列:21 Nginx+uWSGI+webpy环境搭建实践3

更新时间:2017-07-04 10:36:40浏览次数:1+次

        这篇来讲讲webpy如何处理请求的。这篇也会将三者串联起来,让我们可以真正处理动态的http请求了,形成交互。

        按照上一篇的配置,我们需要在/data/test/目录下提供一个main.py的文件。main.py是主模块,就和C语言的main函数一样的。当然,这个文件名无所谓,按照uWSGI配置文件里的module指定的值来。

        我们来看看我们准备的文件夹:

    云平台开发架构分析系列21:Nginx+uWSGI+webpy环境搭建实践3

       我直接将uwsgi.ini文件放在了这里,目的是为了方便管理。免得配置文件和数据文件分散,找都不好找。html文件夹里则放置静态网页文件,如index.html、404.html、500.html等。而test目录则放置python编写的脚本文件,用来处理http的动态请求的,实现交互。

        test目录下的内容如下:

    云平台开发架构分析系列21:Nginx+uWSGI+webpy环境搭建实践3

       这里的日志文件,是在uwsgi.ini指定的日志文件,必须要建立一个log,否则uWSGI启动时会报错。main.py作为入口的程序。文件内容如下:

    

#!/usr/bin/env python
# coding: utf-8
from url import urls
import web
app = web.application(urls, globals())
application = app.wsgifunc()
if __name__ == "__main__":
    app.run()
    因为我们安装了webpy,所以我们这里导入web就可以,如果没有安装,则没有web模块。然后我们这里还从文件url.py导入了urls。所以我们看到文件夹里有一个url.py的文件。还有一个测试文件test.py,看看能不能处理请求。

    

        web的application函数将urls和对应的文件进行关联,这样在接收到对应的url的时候,就可以转到对应的python脚本文件处理。这里关键的就只有两句代码,也就是从uWSGI那里接受相关的信息,然后再转到其他py脚本文件处理。这两句代码具体的作用,这里暂时就不说了。先用着再说,以后有空再研究。

        最后两句,是用在直接运行main.py的时候起作用。如果app.run()执行了,也就启动了webpy自带的http服务器。如果被uWSGI服务器调用,则不会执行if里的代码,也就不会启动自带的http服务器,进而只用来处理web请求。

        我们来看看url.py的内容:

    

#!/usr/bin/env python
# coding: utf-8
urls = (
    '/api/hello', 'test.hello',
)
     我们这里只写了一个url,然后关联到test.py的hello类处理。再来看看test.py文件的内容:

    

    

#!/usr/bin/python
#-*-coding:utf-8-*-
import web
class hello:
    def GET(self):
        client_ip = web.ctx.ip
        return u'<html><head><title>Welcome</title><meta charset="utf-8"/></head><body>您的IP: <b>%s</b></body></html>' % (client_ip)
    而在hello类中,定义了一个GET方法。当HTTP请求到这里的时候,如果是使用GET方法请求的,就会执行这里的GET函数。然后这里获取IP,然后格式化到一串字符串里。而这个字符串就是一个最简化的html数据。这段数据返回到浏览器,就可以正常的被显示出来。然后在浏览器输入:

    

    http://服务器的IP/api/hello

        结果如下:

    云平台开发架构分析系列21:Nginx+uWSGI+webpy环境搭建实践3

       这里能够显示您的IP,自然还可以显示各种各样的东西。具体的web的python编程,我就不演示了。这里需要重点说一些注意事项。

    1.在浏览器中输入的地址:http://服务器IP地址/api/hello  里的路径,/api/hello里的/api必须在nginx的配置文件的location里定义。然后在location里将IP地址和端口号定义准确。这样才传递了第一步。在修改了配置文件后,需要重启nginx。

    2.在uWSGI的配置文件里,我们需要准确的指定socket即IP和端口,承接nginx,而chdir和module则往下接着webpy。修改了配置文件后,需要重启uWSGI。

    3.webpy这边,则需要按照uWSGI的要求,提供好module入口模块的Python文件,然后定义一个url文件来绑定一系列的url和对应处理的python脚本文件,并指定好处理的类。

    4.那么浏览器中的url,路径部分(除了域名部分和后面的参数部分),如:http://www.cjjjs.com/a/a/w?de=e,域名部分为http://www.cjjjs.com,参数部分为?de=e,剩余的部分就是路径。路径部分的内容就是url.py里的内容,不能错。而nginx的配置文件里的location则只取路径中目录部分,此处就是/a/a/。这几个的关系很容易绕晕,所以我这里特别提出来。

    5.url.py里的内容修改后,重启一下uWSGI服务器,以便webpy重新加载url列表使之生效。而只是修改python处理请求的文件,则不需要重启服务器。

        这些注意事项如果都做好,那么整个通路就打通了。然后我们就只需要编写url里指定的python脚本文件就行了。我们可以将url作为每一个页面来处理动态交互,也可以将每一个url作为api提供出去,然后用js来调用,也就形成restful API。

        那么到此,我们的服务器就正式搭建起来了。赶紧动手试试吧。