[英]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個解決方案:
在您的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是否解析為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
您可以通過以下方式檢查主機文件
sudo vi /etc/hosts
open this file C:\Windows\System32\Drivers\etc\hosts
如果您的主機文件中沒有localhost,則添加並保存它。
您應該嘗試將localhost
為0.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.