nginx+python的搭建方法--uwsgi (继续进阶)

nginx+uwsgi 安装
-------------------------
1.编译
到这里下载  http://projects.unbit.it/downloads/

-------以0.9.6.8版本为例 
tar xzvf uwsgi-0.9.6.8.tar.gz  
cd uwsgi-0.9.6.8  
make  
cp uwsgi /usr/bin 

2.配置nginx转发规则
在nginx配置文件的server段中,加上配置

# 把所有请求都重定向给uwsgi处理  
location / {    
  include uwsgi_params    
  uwsgi_pass 127.0.0.1:9090    
} 

# 将指定的url重定向个uwsg的 
location ^~ /your_dir/your_cgi {  
  include uwsgi_params    
  uwsgi_pass 127.0.0.1:9090    
} 

3.运行uwsgi

执行
uwsgi -s :9090 -w your_app_file


-------------------------示例的内容可以是:
#!/usr/bin/python 
#hello.py 

import web 

urls = ( 
    '/(.*)', 'hello' 
) 
app = web.application(urls, globals()) 
class hello: 
    def GET(self, name): 
        if not name: 
            name = 'World' 
        return 'Hello, ' + name + '!' 

application = app.wsgifunc() 
nginx配置
 location ^~ /eventlet/cgi { 
                include uwsgi_params; 
                uwsgi_pass 127.0.0.1:9090; 
            } 
nginx重启

启动:
uwsgi --socket myapp.cgi -s :9090   --w myapp.cgi

访问:

curl http://localhost/eventlet/myapp

------------------ 获取请求中的数据

import sys

def read_obj(env): 
    if 'wsgi.input' in env: 
        return env['wsgi.input'] 
    else: 
        return sys.stdin

#获取HTTP POST数据
def get_http_post_data(env):
     content_length = int(env['CONTENT_LENGTH'])
     buf = read_obj(env).read(content_length)  #buf就是post的参数,当然还是个字符串
     return buf


#获取HTTP GET数据
def get_http_get_data(env):
     buf = env['QUERY_STRING']
     return buf

def application(env, start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    
    http_post_data = get_http_post_data(env)
    http_get_data = get_http_get_data(env)
  
    return '' #这个示例不在乎返回信息


----------------------------进一步

返回格式化的数据示例:

import sys,json

def read_obj(env): 
    if 'wsgi.input' in env: 
        return env['wsgi.input'] 
    else: 
        return sys.stdin

#获取HTTP POST数据
def get_http_post_data(env):
     content_length = int(env['CONTENT_LENGTH'])
     buf = read_obj(env).read(content_length)  #buf就是post的参数,当然还是个字符串
     return buf

#获取HTTP GET数据
def get_http_get_data(env):
     buf = env['QUERY_STRING']
     return buf
    

def application(env, start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    
    http_post_data = get_http_post_data(env)
    http_get_data = get_http_get_data(env)
  
    #返回格式化数据,json很好用:-)
    reply_json = {'code':0,'msg':'this is a demo return str'}
    return json.dumps(reply_json) 



你可能感兴趣的:(nginx,python,教程,uwsgi,快速部署)