2017-10-29 21 views
1
ここ

は最小限の例です設定:フラスコに内蔵されているサーバーは常に404 SERVER_NAMEと

from flask import Flask 

app = Flask(__name__) 
app.config['DEBUG'] = True 
app.config['SERVER_NAME'] = 'myapp.dev:5000' 


@app.route('/') 
def hello_world(): 
    return 'Hello World!' 

@app.errorhandler(404) 
def not_found(error): 
    print(str(error)) 
    return '404', 404 


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

私はSERVER_NAME設定した場合、フラスコは応答すべての 404エラーとURL、と私はその行をコメントアウトしますそれは再び正しく機能します。

/Users/sunqingyao/Envs/flask/bin/python3.6 /Users/sunqingyao/Projects/play-ground/python-playground/foo/foo.py 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
* Restarting with stat 
* Debugger is active! 
* Debugger PIN: 422-505-438 
127.0.0.1 - - [30/Oct/2017 07:19:55] "GET/HTTP/1.1" 404 - 
404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again. 

私はApacheまたは任意の生産のWebサーバーを使用していないので、これは、Flask 404 when using SERVER_NAMEの重複はないことに注意してください。私はFlaskの組み込み開発サーバーを扱っています。

macOS High SierraでPython 3.6.2、Flask 0.12.2、Werkzeug 0.12.2、PyCharm 2017.2.3を使用しています(該当する場合)。

答えて

0

Flask docsから:

サーバーの名前とポート番号。サブドメインのサポートに必要です (例: 'myapp.dev:5000')localhostは のサブドメインをサポートしていないので、これを「localhost」に設定することは役に立ちません。 SERVER_NAMEをデフォルトに設定すると、要求なしでURLを生成することもできます。 コンテキストが、アプリケーションコンテキストを使用します。 SERVER_NAME

もっとSERVER_NAMEキーは、サブドメイン サポートのために使用されています。実際のサーバー名についてはFlickerが の知識なしでサブドメインの部分を推測することができないため、 をサブドメインで使用する場合はこれが必要です。これはセッションクッキーにも使用されます。

Flaskだけでなく、 のサブドメインがわからないという問題があることに注意してください。あなたのウェブブラウザも同様です。ほとんどの現代のウェブ ブラウザでは、クロスサブドメインのクッキーをドットなしのサーバ という名前のサーバに設定することはできません。サーバー名が 'localhost'の場合、 は 'localhost'とすべてのサブドメイン のCookieを設定できません。その場合は 「myapplication.local」のような別のサーバー名を選択し、この名前+ を使用するサブドメインをホスト構成に使用するか、ローカルバインドを設定してください。

localhostに設定する必要はありません。ドキュメントに示唆されているように、myapp.dev:5000のようなものを試してみてください。debug=Trueを使用して

+0

はまだ働いていない、私の更新質問:( –

0

は私のために働いた:

from flask import Flask 


app = Flask(__name__) 
app.config['SERVER_NAME'] = 'localhost:5000' 

@app.route('/') 
def hello_world(): 
    return 'Hello World!' 


if __name__ == '__main__': 
    app.run(debug=True) 
+0

はまだ働いていない参照してください。私の更新された質問を参照してください:( –

2

をあなたはまた同じようapp.runの内部だけのポート番号とホストを使用することができます。私は時々

app.config['DEBUG'] = True 
app.config['SERVER_NAME'] = 'myapp.dev:5000' 
+0

あなたが欲しいものにそこにホストを更新する –

0

app.run(debug=True, port=5000, host="localhost") 

削除しますFlaskのドキュメントが混乱しているのを見つけてください(上記の引用符@dm295を参照してください。 'SERVER_NAME'を取り巻く意味合いは解析が難しい)。しかし、@Dancer Phdの答えに代わる設定は、 'HOST'と 'PORT'パラメータを 'SERVER_NAME'ではなくconfigファイルで指定することです。例えば

、さんがそうのような&ポート番号ホストを追加し、あなたがフラスコdocsで提案されているこの設定方法を使用するとしましょう:

class Config(object): 
    DEBUG = False 
    TESTING = False 
    DATABASE_URI = 'sqlite://:memory:' 
    HOST = 'http://localhost' # 
    PORT = '5000' 

class ProductionConfig(Config): 
    DATABASE_URI = 'mysql://[email protected]/foo' 

class DevelopmentConfig(Config): 
    DEBUG = True 

class TestingConfig(Config): 
    TESTING = True 
関連する問題