python 자동화 테스트 (5) -- nginx + uwsgi + flask 웹 서버 구축
1) client 는 먼저 클 라 이언 트 가 서비스 자원 을 요청 합 니 다. 2) nginx nginx 는 직접 대외 적 인 서비스 인터페이스 로 클 라 이언 트 가 보 낸 http 요청 을 받 으 면 패 킷 을 풀 고 분석 합 니 다. 정적 파일 요청 이 라면 nginx 가 설정 한 정적 파일 디 렉 터 리 에 따라 요청 한 자원 을 되 돌려 줍 니 다. 동적 요청 이 라면 nginx 는 설정 파일 을 통 해 uWSGI 에 요청 을 전달 합 니 다.3) uWSGI uWSGI 는 받 은 패 키 지 를 처리 하여 wgi, 4) wgi wgi 를 요청 에 따라 django, flask 프로젝트 의 한 파일 이나 함 수 를 호출 합 니 다. 5) 웹 애플 리 케 이 션 이 처리 되면 django, flask 는 되 돌아 오 는 값 을 wgi 에 게 건 네 주 고 6) wgi wgi 는 되 돌아 오 는 값 을 포장 하여 uWSGI, 7) uWSGI uWSGI 에 게 전달 합 니 다.8) nginx nginx 는 최종 적 으로 클 라 이언 트 (예 를 들 어 브 라 우 저) 에 게 반환 값 을 되 돌려 줍 니 다.
2. nginx 배합
server {
listen 80; // web
server_name xxxxxx; //
#charset koi8-r;
access_log /home/wyz/flask/logs/access.log; // ,logs , 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
uwsgi_param UWSGI_SCRIPT manage:app; // (
// flask
// )
}
}
3. 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 웹 응용 프로그램
업로드 파일 을 수신 하고 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)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.