繁体   English   中英

Flask-如何使用蓝图提供静态文件?

[英]Flask - How to serve static files with Blueprint?

我无法使用Flask从蓝图提供静态文件。 我知道这个问题已经被问过很多次了,但是感觉指示并不清楚。 另外,我还无法使其工作。 我具有以下文件结构:

  FlaskApp
    ├──__init__.py # Let's call it OuterInit.
    └── FlaskApp
        ├──__init__.py # Let's call it InnerInit.
        ├── modulo
        │   └── main.py #My blueprint
        ├── mongo
        │   └── otherBlueprint... Still not developed.
        ├── __pycache__
        ├── resources
        ├── static
        │   ├── public
        │   │   └── SomePublicFiles...
        │   └── R
        |       └── TheFileIWant.R #I want to serve this file
        └── templates
             └── index.html #I serve this template from my Blueprint. (it works)

OuterInit :此文件仅启动服务。 就像我的主。 有人告诉我这是一个好习惯。

from FlaskApp import app
app.run()

InnerInit :此文件注册蓝图并创建应用程序。

from flask import Flask, render_template
app = Flask(__name__)
from FlaskApp.modulo.main import map_module
app.register_blueprint(map_module)

Main.py :在这里,我公开了此模块的API服务。

import os
otherImports...

static_folder = os.path.join(os.pardir, 'static')
map_module = Blueprint('map_module', __name__, static_folder=static_folder, static_url_path="/static")

@map_module.route("/map")
def map():
    return render_template("index.html")

@map_module.route("/serviceData")
def serviceData():
    r = robjects.r
    r.source("R/TheFileIWant.R")
    return "Ok."

我可以提供index.html文件,它实际上显示了许多动态元素...但是我无法使用rpy2访问R文件。 我确定这与设计图有关,因为在创建设计图(使程序更具模块化)之前,它可以工作。

这是我访问' http://localhost:5000/serviceData '时得到的

(flaskEnv) python_user@Pipepc:~/Documents/FlaskApp$ python __init__.py 
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Error in file(filename, "r", encoding = encoding) : 
  cannot open the connection

  warnings.warn(x, RRuntimeWarning)
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: In addition: 
  warnings.warn(x, RRuntimeWarning)
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Warning message:

  warnings.warn(x, RRuntimeWarning)
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: In file(filename, "r", encoding = encoding) :
  warnings.warn(x, RRuntimeWarning)
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: 

  warnings.warn(x, RRuntimeWarning)
/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning:  cannot open file 'R/rmethod.R': No such file or directory

  warnings.warn(x, RRuntimeWarning)
[2017-03-24 01:36:28,320] ERROR in app: Exception on /serviceData [GET]
Traceback (most recent call last):
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/python_user/Documents/FlaskApp/FlaskApp/modulo/main.py", line 19, in serviceData
    r.source("R/rmethod.R")
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/robjects/functions.py", line 178, in __call__
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
  File "/home/python_user/Documents/flaskEnv/local/lib/python3.4/site-packages/rpy2/robjects/functions.py", line 106, in __call__
    res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in file(filename, "r", encoding = encoding) : 
  cannot open the connection

问题出在您致电R的内部:

@map_module.route("/serviceData")
def serviceData():
r = robjects.r
r.source("R/TheFileIWant.R")
return "Ok."

更改为此:

r.source(map_module.root_path + "/R/TheFileIWant.R)

同样,将R文件移动到蓝图下的文件夹中。 它根本不是静态文件(定义是“由Web服务器按原样提供”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM