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

8oh*_*oh8 5 python flask

我正在使用 Flask 应用程序工厂模式,并拥有这个 run.py 文件:

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(host='localhost', debug=True)
Run Code Online (Sandbox Code Playgroud)

然后我像这样运行应用程序:

python run.py
Run Code Online (Sandbox Code Playgroud)

但是当我访问http://localhost:5000 时它不起作用。它说:

未找到

在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。

可能有什么问题?当我有 127.0.0.1 地址时它运行良好......

我需要在“本地主机”上运行,因为我正在集成方形支付,他们的沙箱设置要求我从“本地主机”向他们的 API 发出请求。

另外,当我在浏览器中发出请求时,在烧瓶响应时在终端上有这个:

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 -
Run Code Online (Sandbox Code Playgroud)

所以看起来请求到达了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
Run Code Online (Sandbox Code Playgroud)

小智 21

万一 Mac 上的任何人遇到此问题并且无法找到任何答案(像我一样),我刚刚发现这是因为 Apple Airplay 接收器在端口 5000 上运行。禁用 Airplay 接收器并重试。

  • 这实际上正是我正在寻找的答案。谢谢 (3认同)

Esp*_*azi 5

简单的替代解决方案是首先检查端口 5000 是否可用,您可以使用以下命令进行检查:

netstat -lat
Run Code Online (Sandbox Code Playgroud)

在此处找到有关可用端口的更多信息:如果您没有义务使用端口 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)
Run Code Online (Sandbox Code Playgroud)

评论中建议的另一个解决方案是检查 127.0.0.1 是否解析为 localhost 通过键入此命令找到主机文件,并检查您是否与我的行相同:

nano /etc/hosts
Run Code Online (Sandbox Code Playgroud)

并打开文件:

##
# 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
Run Code Online (Sandbox Code Playgroud)