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

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013