nginx+python的搭建方法--uwsgi (繼續進階)

nginx+uwsgi 安裝
-------------------------
1.編譯
到這裏下載  http://projects.unbit.it/downloads/ html

-------以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 python

------------------ 獲取請求中的數據 nginx

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 '' #這個示例不在意返回信息


----------------------------進一步 web

返回格式化的數據示例: shell

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)
相關文章
相關標籤/搜索