簡體   English   中英

為什么 localhost:5000 在 Flask 中不起作用?

[英]Why does localhost:5000 not work in Flask?

我正在使用 flask 應用程序工廠模式,並有這個 run.py 文件:

from app import create_app

app = create_app()

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

然后我像這樣運行應用程序:

python run.py

但是當我 go 到http://localhost:5000它不起作用。 它說:

未找到

在服務器上找不到請求的 URL。 如果您手動輸入 URL,請檢查您的拼寫並重試。

有什么問題嗎? 當我有 127.0.0.1 地址時它工作得很好......

我需要在“localhost”上運行,因為我正在集成 square payments 並且他們的沙箱設置要求我從“localhost”向他們的 API 發出請求。

另外,當我在瀏覽器中發出請求時,當 flask 響應時,在終端上是這樣的:

127.0.0.1 - - [09/Sep/2017 00:30:45] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [09/Sep/2017 00:30:45] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [09/Sep/2017 00:30:45] "GET /favicon.ico HTTP/1.1" 404 -

所以看起來請求到達 flask 但 flask 返回 404。

這是我的init .py 文件的一部分:

# from __future__ import print_function


# import flask
from flask import Flask, render_template, url_for, redirect, flash, request, \
    session, current_app, abort
import os
# flask sqlaclhemy
from sqlalchemy import func, desc, asc, or_, and_

from flask_admin import Admin, AdminIndexView
from flask_admin.contrib.sqla import ModelView

# Flask secrutiy
from flask_security import (Security, SQLAlchemyUserDatastore, 
    login_required, current_user)
from flask_login import LoginManager
from flask_mail import Mail

# square connect setup
import uuid
import squareconnect
from squareconnect.rest import ApiException
# from squareconnect.apis.locations_api import LocationsApi
from squareconnect.apis.transactions_api import TransactionsApi




mail = Mail()

class CustomAdminIndexView(AdminIndexView):
    def is_accessible(self):
        return current_user.is_authenticated and current_user.has_role('admin')

def create_app():
    app = Flask(__name__)
    app.config.from_object(os.environ['APP_SETTINGS'])
    mail.init_app(app)
    from models import db, User, Role
    db.init_app(app)

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    security = Security(app, user_datastore)

    @app.route('/')
    def home():
        return render_template('home.html')

    return app

一個簡單的替代解決方案是首先檢查端口5000是否可用,您可以使用以下命令進行檢查:

netstat -lat

在此處找到有關可用端口的更多信息:如果您沒有義務使用端口5000,則可以嘗試其他所需的任何方法..如果一切正常,這意味着您的主頁有問題,那么您就沒有通往“ /',這就是為什么當您進入localhost:5000 /時得到404錯誤的原因:因此,要糾正它,您有3個解決方案:

  1. 在您的init .py文件中添加app.route('/')

  2. 創建應用程序后將其直接添加到您的run.py中(不是一個好方法)

  3. 嘗試使用藍圖

由於您沒有提供init .py代碼,因此請將其添加到run.py中,

from app import create_app
app = create_app()
@app.route('/')
def homepage():
    return 'hello world'
if __name__ == '__main__':
    app.run(host='localhost', port=9874)

注釋中建議的另一種解決方案是通過鍵入以下命令來檢查127.0.0.1是否解析為localhost找到主機文件,並檢查是否與我的行相同:

nano /etc/hosts

並打開文件:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost

可能是您需要安裝虛擬環境

pip安裝virtualenv

做這個。 希望這行得通

您的主機文件中將沒有作為localhost的條目

示例主機文件

127.0.0.1       localhost

您可以通過以下方式檢查主機文件

對於Linux

sudo vi /etc/hosts

用於窗戶

open this file C:\Windows\System32\Drivers\etc\hosts

如果您的主機文件中沒有localhost,則添加並保存它。

您應該嘗試將localhost0.0.0.0

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

這對我來說可以在本地主機上使用。

from flask import Flask
app = Flask(__name__)

@app.route("/") def hello(): 如果name == " main " 返回 "Hello": app.run(host='0.0.0.0', port=9874)

以防有人在 Mac 上遇到這個問題並且找不到任何答案(比如我),我剛剛發現這是因為 Apple Airplay Receiver 在端口 5000 上運行。禁用 airplay 接收器並重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM