一定是我对flask中的pycharm(调试)服务器的工作方式有误解。因为一个很简单的网页似乎无法加载。
我希望通过flask来服务器文件(即使它们主要是静态文件),因为它允许我有更多的控制和所有的东西在同一个地方。
flask应用程序看起来像。
import flask
from flask import Flask, request, render_template
import os
app = Flask(__name__, static_folder="")
@app.route('/', methods=['GET', 'POST'])
def login():
m = request.method
d = request.values
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))
u = os.path.join(SITE_ROOT, "index.html")
r = flask.make_response()
return flask.send_file(u)
这是简单地放在项目的根目录下 index.js也放在项目的根目录下。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<!--<link rel="stylesheet" href="styles/styles.css">-->
</head>
<body aurelia-app="rel/main">
<script src="/testit.js"></script>
</body>
</html>
(注意,大部分注释都是为了简化,我留下注释是为了让人看到最终的目标)。
文件 "testit.js "也存在于根目录下,内容为。
console.log('in testit.js');
现在当我运行 "index.js "时,工作正常,pycharm显示了页面,并且该行的记录也符合预期。当我运行服务器时,问题就出现了:服务器确实显示了网页(通过检查源码看到)。然而在chrome中的开发工具注意到 "404 not found "错误的 "testit.js "文件。
那么这是怎么回事,我确定那个文件在那里?我真的不喜欢在开发的时候,为了测试的目的而建立一个nginx服务器。我也不愿意过多的接触文件结构(system.js依靠这个复杂的结构在几个不同的文件夹中找到库)。
虽然与问题没有直接关系,但现在的文档结构看起来是这样的。
/
dist/
rel/
... javascript SPA files, refered to by config.js in release
debug/
... javascript SPA files, refered to by config.js in debug
test/
... javascript SPA files, refered to by config.js during unit tests
jspm_packages/
github/
npm/
node_modules/
src/
... typescript SPA files compiled to dist/ by build tool
index.html
testit.js
config.js
app.py <-- main application file
在Klaus D的建议下,我试着按照以下方式来做 静态文件的文档. 但我似乎无法理解这有什么帮助。该 flask.url_for('static', 'index.html')
只是提供了一个文件路径。所以直接响应,实际上不会显示文件。- 而打开它也没有任何不同(或者在我的例子中,由于文件路径中包含了前导斜线,所以甚至没有工作)。
from functools import lru_cache
import flask
from flask import Flask, request, render_template
import os
app = Flask(__name__, static_folder="")
@app.route('/', methods=['GET', 'POST'])
def login():
print("oh")
u = flask.url_for('static', filename="index.html")
r = flask.make_response(u)
return flask.send_file(u)
显示一个服务器错误,pycharm的日志显示 "FileNotFoundError: [Errno 2] No such file or directory: 'index.html'" (当通过send_file使用'index.html'时,文件正在服务器上)
当我返回 "r "并期望flask magic创建一个完整的页面时,浏览器显示简单的 "index.html "作为响应。所以不是文件本身,只是文件路径)。
以防有人在寻找如何做到这一点。
https:/flask.palletsprojects.comen1.1.xpatternssinglepageapplications。
这是建议的代码。
from flask import Flask, jsonify
app = Flask(__name__, static_folder='app', static_url_path="/app")
@app.route("/heartbeat")
def heartbeat():
return jsonify({"status": "healthy"})
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
return app.send_static_file("index.html")
如果你使用的是标准的vue设置(build to dist-folder),你应该把第二行改成如下。
app = Flask(__name__, static_folder="dist", static_url_path="/")