Python 为什么localhost:5000不能在Flask中工作?

Python 为什么localhost:5000不能在Flask中工作?,python,flask,Python,Flask,我正在使用flask app factory模式,例如,并具有以下run.py文件: from app import create_app app = create_app() if __name__ == '__main__': app.run(host='localhost', debug=True) 然后我像这样运行应用程序: python run.py 但是当我去的时候,它不起作用。 它说: 找不到 在服务器上找不到请求的URL。如果您输入了URL 请手动检查拼写,然后重

我正在使用flask app factory模式,例如,并具有以下run.py文件:

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(host='localhost', debug=True)
然后我像这样运行应用程序:

python run.py
但是当我去的时候,它不起作用。 它说:

找不到

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

有什么不对劲吗?当我有127.0.0.1地址时,它工作得很好

我需要在“localhost”上运行,因为我正在集成square支付,他们的沙箱设置要求我从“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是否可用。您可以使用此comand检查:

netstat -lat
查找有关可用端口的详细信息: 如果您没有义务使用端口5000,您可以尝试其他任何您想要的。。 如果一切正常,这意味着您的主页有问题,您没有到“/”的路由,这就是为什么在转到localhost:5000/”时出现404错误的原因: 因此,要纠正它,您有3种解决方案:

  • init.py文件中添加app.route('/')

  • 创建应用程序后直接将其添加到run.py中(不是一个好方法)

  • 尝试使用蓝图

  • 由于您没有提供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 resolve to 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
    

    在您的主机文件中将没有作为localhost的条目

    示例主机文件 您可以通过以下方式检查主机文件

    对于linux 窗户
    如果主机文件中没有本地主机,请添加并保存它

    您可能需要安装虚拟环境

    pip安装virtualenv


    这样做。希望这能起作用

    您应该尝试为
    0.0.0
    关闭
    localhost

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

    这在本地主机上为我服务。

    您在使用linux吗?您在调用app.run(host='localhost',port=5000)时是否尝试传递显式端口?您的本地主机是否解析为127.0.0.1?(例如,通过主机文件条目)cat/etc/hosts。是否有127.0.0.1和localhost位于同一行的条目?如果没有,请添加它。是的,在hosts文件中有一行:127.0.0.1 localhost我在hosts文件中有一行localhost。还尝试了另一个端口。仍然不工作。我可以看到flask服务器接收get请求,但仍然从flask返回404。如果你看到flask服务器表示你的服务器正在运行,请告诉我你有回家的路线吗??显示您的查看功能。让我来编辑答案。我编辑了问题,并包含了init.py文件的一部分。我还尝试将其添加到run.py文件中,但仍然没有完成。它显示在flask服务器日志中,但表示404未找到:(好的,我找到了,我在config.py中有这个:server_NAME='localhost',我删除了这一行,它就工作了。这是创建flask项目时的良好做法。我要补充的是,还需要使用$virtualenv['filename']创建虚拟环境,但不确定这是否解决了本地主机问题
    sudo vi /etc/hosts
    
    open this file C:\Windows\System32\Drivers\etc\hosts
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True)