Flask网络应用(使用flask服务于一个温泉网站),找不到脚本。

问题描述 投票:1回答:1

一定是我对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 "作为响应。所以不是文件本身,只是文件路径)。

javascript python flask single-page-application
1个回答
0
投票

以防有人在寻找如何做到这一点。

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="/")
© www.soinside.com 2019 - 2024. All rights reserved.