SORU
17 Aralık 2013, Salı


Nasıl Matara statik dosyaları hizmet için

Bu utanç verici. Birlikte Flask öğrendim ve şimdi sadece bazı bağlantıları ile tek bir statik bir HTML sayfası CSS ve JS için hizmet veren, bunun için bir uygulama var. Ve belgeler Flask statik dosyalar dönen açıklar yerde bulamıyorum. Evet, render_template kullanabilirim ama veri templatized olmadığını biliyorum. send_file url_for doğru şey olduğunu düşündüm, ama o iş için alamadım. Bu arada, dosyaları açmak, içerik okuma ve uygun mime türü ile Response bir arma ediyorum:

import os.path

from flask import Flask, Response


app = Flask(__name__)
app.config.from_object(__name__)


def root_dir():  # pragma: no cover
    return os.path.abspath(os.path.dirname(__file__))


def get_file(filename):  # pragma: no cover
    try:
        src = os.path.join(root_dir(), filename)
        # Figure out how flask returns static files
        # Tried:
        # - render_template
        # - send_file
        # This should not be so non-obvious
        return open(src).read()
    except IOError as exc:
        return str(exc)


@app.route('/', methods=['GET'])
def metrics():  # pragma: no cover
    content = get_file('jenkins_analytics.html')
    return Response(content, mimetype="text/html")


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_resource(path):  # pragma: no cover
    mimetypes = {
        ".css": "text/css",
        ".html": "text/html",
        ".js": "application/javascript",
    }
    complete_path = os.path.join(root_dir(), path)
    ext = os.path.splitext(path)[1]
    mimetype = mimetypes.get(ext, "text/html")
    content = get_file(complete_path)
    return Response(content, mimetype=mimetype)


if __name__ == '__main__':  # pragma: no cover
    app.run(port=80)

Birisi bir kod örneği vermek istiyorum ya bu url? Bu ölü basit olacak biliyorum.

CEVAP
18 Aralık 2013, ÇARŞAMBA


Tercih edilen yöntem nginx veya başka bir web sunucusu statik dosyaları hizmet için kullanmaktır; bunu yapmak mümkün daha verimli Şişe daha olacak.

Ancak, send_from_directory bazı durumlarda çok kullanışlı olan bir dizin, dosya göndermek için kullanabilirsiniz:

from flask import Flask, request, send_from_directory

# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path='')

@app.route('/js/<path:path>')
def send_js(path):
    return send_from_directory('js', path)

if __name__ == "__main__":
    app.run()

Yapındeğilkullanıcı tarafından sağlanan bir yol ile send_file send_static_file kullanın.

send_static_file örnek:

from flask import Flask, request
# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path='')

@app.route('/')
def root():
    return app.send_static_file('index.html')

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • The Scary Snowman

    The Scary Sn

    1 ŞUBAT 2011
  • theKGB65

    theKGB65

    24 Aralık 2007