2017-01-14 1 views
0

Flask에 처음 딥을 찍었고 URL 블랙리스트를 관리하기 위해 GET, POST 및 DELETE 경로가있는 API를 만드는 데 사용하려고합니다.Flask POST 경로가 응답하지 않게 됨

시간이 지나면 POST 경로에서 "응답을받지 못했습니다."라는 오류 메시지가 나타납니다. 이상한 부분은 GET 및 DELETE 경로가 여전히 잘 작동한다는 것입니다. 로깅을 시도했지만 많은 것을 얻을 수 없었습니다. 나는 어떤 도움을 주셔서 감사합니다! 여기

from flask import Flask, request 
from flask_cors import CORS, cross_origin 
from flask_restful import Resource, Api 
import pickle 

app = Flask(__name__) 
app.config['DEBUG'] = True 
CORS(app) 


@app.route("/get-blacklist") 
def loadblacklist(): 
    blacklist = pickle.load(open("blacklist.p", "rb")) 
    return dumps(blacklist) 


@app.route("/post-blacklist", methods=['POST']) 
def puturl(): 
    # Get and clean URL 
    url = request.form['url'] 
    url = sanitise(url) 

    # Load the pickle 
    blacklist = list(pickle.load(open("blacklist.p", "rb"))) 

    # Check if it's already in there 
    if url not in blacklist: 
     blacklist.append(url) 

    # Save the pickle 
    pickle.dump(blacklist, open("blacklist.p", "wb")) 

    return 'You posted {}'.format(url) 


@app.route("/remove-blacklist", methods=['DELETE']) 
def removeurl(): 
    # Get and clean the URL 
    url = request.form['url'] 
    url = sanitise(url) 

    # Load the pickle 
    blacklist = list(pickle.load(open("blacklist.p", "rb"))) 

    # Remove if its in there 
    if url in blacklist: 
     blacklist.remove(url) 

    # Save the pickle 
    pickle.dump(blacklist, open("blacklist.p", "wb")) 

    return 'You removed {}'.format(url) 


def sanitise(url): 
    # Sanitise 
    url = url.lower() 
    url = url.replace('www.', '') 
    url = url.replace('http://', '') 
    url = url.replace('https://', '') 
    if url[-1] == '/': 
     url = url[:-1] 
    return url 


if __name__ == '__main__': 
    app.run() 

내 설정 파일입니다 :

import os 

bind = '0.0.0.0:8000' 
workers = 3 
backlog = 2048 
worker_class = "sync" 
debug = False 
proc_name = 'gunicorn.proc' 
pidfile = './gunicorn.pid' 
logfile = './debug.log' 
loglevel = 'debug' 
timeout = 1000 

그리고 여기에 내가 노동자 시작하는 데 사용하고 명령입니다 :

gunicorn -c app.conf -w3 --certfile=/etc/letsencrypt/live/mtfmu4.tk/cert.pem --keyfile=/etc/letsencrypt/live/mtfmu4.tk/privkey.pem api:app 

여기

내 응용 프로그램입니다 내 POST 경로에서 특히 이런 일이 발생할 수있는 것과 다른 것을 볼 수 없습니다. 이자형.

저는 virtualenv, Flask, apache2 및 Ubuntu 14.04의 gunicorn에서 Python 3을 실행하고 있습니다.

도움이 될 것입니다.

+0

어떻게 데이터를 게시하고 있습니까? curl 또는 다른 python 스크립트를 사용하고 있습니까? – jprockbelly

+0

실제로 jQuery Ajax 호출을 사용하여 POST 중이라고. 나는이 문제를 해결했을지 모른다는 생각이 들지만, 또 다시 충돌 하는지를보기 위해 또 다시 12 시간을 주겠다. 그것이 아래로 내 솔루션을 게시하면 밖으로 작동합니다 –

답변

0

해결 방법은 피클 파일을 여는 데 with 문을 사용하는 것이 었습니다. 열린/닫힌 충돌이 일어나고있는 것을 돕는 것 같았다.

관련 문제