python自動化測試(五)--nginx+uwsgi+flask搭建web服務器

1.web服務基本流程

1)client
首先客戶端請求服務資源广料,
2)nginx
nginx作為直接對外的服務接口,接收到客戶端發(fā)送過來的http請求,會解包、分析屹培,
如果是靜態(tài)文件請求就根據(jù)nginx配置的靜態(tài)文件目錄迂苛,返回請求的資源禁悠,
如果是動態(tài)的請求,nginx就通過配置文件,將請求傳遞給uWSGI欧啤;
3)uWSGI
uWSGI 將接收到的包進行處理睛藻,并轉發(fā)給wsgi,
4)wsgi
wsgi根據(jù)請求調用django, flask工程的某個文件或函數(shù)邢隧,
5)web application
處理完后django,flask將返回值交給wsgi店印,
6)wsgi
wsgi將返回值進行打包,轉發(fā)給uWSGI倒慧,
7)uWSGI
uWSGI接收后轉發(fā)給nginx,
8)nginx
nginx最終將返回值返回給客戶端(如瀏覽器)按摘。

2.nginx配制

  • flask_nginx.conf
  • sudo ln -s /home/wyz/flask_nginx.conf /etc/nginx/conf.d/
  • service nginx start/stop/restart
  • ps -ef | grep nginx
 server {
        listen       80;         //默認的web訪問端口
        server_name  xxxxxx;     //服務器名
        #charset koi8-r;
        access_log  /home/wyz/flask/logs/access.log;    //服務器接收的請求日志,logs目錄若不存在需要創(chuàng)建纫谅,否則nginx報錯
        error_log  /home/wyz/flask/logs/error.log;         //錯誤日志

        location / {
            include        uwsgi_params;     //這里是導入的uwsgi配置
            uwsgi_pass     127.0.0.1:5051;   //需要和uwsgi的配置文件里socket項的地址
                                             //相同,否則無法讓uwsgi接收到請求炫贤。
            uwsgi_param UWSGI_CHDIR  /home/wyz/flask;     //項目根目錄
            uwsgi_param UWSGI_PYTHON /home/wyz/flask/env36 //python虛擬環(huán)境
            uwsgi_param UWSGI_SCRIPT manage:app;     //啟動項目的主程序(在本地上運行
                                                     //這個主程序可以在flask內置的
                                                     //服務器上訪問你的項目)
}
}

3.uWSGI配制

  • flask_uwsgi.ini
  • uwsgi --ini /home/wyz/flask/flask_uwsgi.ini
  • ps -ef | grep uwsgi
[uwsgi]
socket = 127.0.0.1:5051
#http = 127.0.0.1:5051
pythonpath = /home/wyz/flask
module = manage
wsgi-file = /home/wyz/flask/manage.py
callable = app
master = true
processes = 4
#threads = 2
daemonize = /home/wyz/flask/server.log

4.flask web應用

實現(xiàn)接收上傳文件,并存放在upload目錄下

from werkzeug.utils import secure_filename
from flask import Flask,render_template,jsonify,request
import time
import os
import base64
 
app = Flask(__name__)
UPLOAD_FOLDER='upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['txt','png','jpg','xls','JPG','PNG','xlsx','gif','GIF'])
 
# 用于判斷文件后綴
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS
 
# 用于測試上傳付秕,稍后用到
@app.route('/test/upload')
def upload_test():
    return render_template('upload.html')
 
# 上傳文件
@app.route('/api/upload',methods=['POST'],strict_slashes=False)
def api_upload():
    file_dir=os.path.join(basedir,app.config['UPLOAD_FOLDER'])
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    f=request.files['myfile']  # 從表單的file字段獲取文件兰珍,myfile為該表單的name值
    if f and allowed_file(f.filename):  # 判斷是否是允許上傳的文件類型
        fname=secure_filename(f.filename)
        print fname
        ext = fname.rsplit('.',1)[1]  # 獲取文件后綴
        unix_time = int(time.time())
        new_filename=str(unix_time)+'.'+ext  # 修改了上傳的文件名
        f.save(os.path.join(file_dir,new_filename))  #保存文件到upload目錄
        token = base64.b64encode(new_filename)
        print token
 
        return jsonify({"errno":0,"errmsg":"上傳成功","token":token})
    else:
        return jsonify({"errno":1001,"errmsg":"上傳失敗"})
 
if __name__ == '__main__':
    app.run(debug=True)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盹牧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌励幼,老刑警劉巖汰寓,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苹粟,居然都是意外死亡有滑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門嵌削,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毛好,“玉大人,你說我怎么就攤上這事苛秕〖》茫” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵艇劫,是天一觀的道長吼驶。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么蟹演? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上捐友,老公的妹妹穿的比我還像新娘蔓纠。我一直安慰自己,他們只是感情好羞反,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布布朦。 她就那樣靜靜地躺著,像睡著了一般苟弛。 火紅的嫁衣襯著肌膚如雪喝滞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天膏秫,我揣著相機與錄音右遭,去河邊找鬼。 笑死缤削,一個胖子當著我的面吹牛窘哈,可吹牛的內容都是我干的。 我是一名探鬼主播亭敢,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼滚婉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帅刀?” 一聲冷哼從身側響起让腹,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扣溺,沒想到半個月后骇窍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡锥余,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年腹纳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驱犹。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘲恍,死狀恐怖,靈堂內的尸體忽然破棺而出雄驹,到底是詐尸還是另有隱情佃牛,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布医舆,位于F島的核電站吁脱,受9級特大地震影響桑涎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜兼贡,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一攻冷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遍希,春花似錦等曼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至废封,卻和暖如春州泊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漂洋。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工遥皂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刽漂。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓演训,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贝咙。 傳聞我的和親對象是個殘疾皇子样悟,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • 雨打芭蕉,月落西窗 你一路決絕 經(jīng)歷黑夜和白晝 浮光掠影庭猩,飛絮濛濛 春日野菜香 你注定流浪在陌路上 說好的春末夏初...
    春風明月閱讀 307評論 5 11
  • 一股滔天邪氣從皇諾所在的洞穴中噴發(fā)而出. “怎么回事窟她!”智絕侯—鳳鳴面容嚴峻,望向山洞.“莫非是...
    丶妖兒閱讀 328評論 1 7
  • 去年的今天完全沒有想到今年會去日本蔼水,感恩遇見易效能震糖,讓我的生命多了很多可能性,可以如此精彩徙缴,感謝張昊老師...
    老虎在奔跑閱讀 1,762評論 10 35