Python 为什么localhost:5000不能在Flask中工作?
我正在使用flask app factory模式,例如,并具有以下run.py文件: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 请手动检查拼写,然后重
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种解决方案:
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)