【Python】【Flask】Flask 後臺發送html頁面多種方法

一、使用模板:css

@app.route('/')
def home():
    return render_template("homepage.html")#homepage.html在templates文件夾下

二、使用 send_from_directoryhtml

root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "html")#html是個文件夾

@app.route('/')
def home():
    return send_from_directory(root, "homepage.html")#homepage.html在html文件夾下

三、使用 app.send_static_filepython

app = Flask(__name__,static_url_path='')#修改靜態文件夾的目錄

@app.route('/')
def home():
    return app.send_static_file('homepage.html')#homepage.html在static文件夾下

四、flask 調用 css文件web

app = Flask(__name__,static_url_path='') 
@app.route('/')
def home():
return app.send_static_file('html/homepage.html')
 <link rel="stylesheet" type="text/css" href="../css/homepagestyle.css">#html裏面引用css

 文件夾結構目錄flask

 

注意:css文件必須在靜態文件夾下,不然css調用不了瀏覽器

 

如下內容來自 http://www.javashuo.com/article/p-ukuwgkft-cy.html 只爲記錄下緩存

flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

一:Flask中的g對象

    Flask中的g對象是個很好的東西,主要用於在一個請求的過程當中共享數據。能夠隨意給g對象添加屬性來保存數據,很是的方便,下面的代碼是一個使用g對象的例子。下面的這個例子會使用random隨機產生一個0~9的整數,並使用g.x保存並記錄debug日誌:微信

# encoding=utf-8
from flask import Flask
from flask import g
import random
 
app = Flask(__name__)
 
@app.before_request
def set_on_g_object():
    x = random.randint(0,9)
    app.logger.debug('before request g.x is {x}'.format(x=x))
    g.x = x
 
@app.route("/")
def test():
    g.x=1000
    return str(g.x)
 
@app.after_request
def get_on_g_object(response):
    app.logger.debug('after request g.x is{g.x}'.format(g=g))
    return response

二:Flask中靜態文件的處理

1.add_url_rule的用法

    Flask中提供了url_for來實現建立url,只是生成一個url。在前面的博文中談論過若是要生成一個css樣式的靜態文件的url須要使用url_for('static',filename='style.css')來建立相應的url。可是若是我有一個目錄attachment的目錄存放一些文件的話是無法經過url_for來生成的,默認url_for只能夠爲static和一些view_func創建url若是要想經過url_for爲attachment來添加url就必須添加一個add_url_rule。cookie

# encoding=utf-8
from flask import Flask
from flask import g
from flask import send_from_directory
from flask import url_for
import random
 
app = Flask(__name__)
 
@app.route("/")
def test():
    return "url建立方式一"
 
def hello():
    return "url建立方式二"
 
app.add_url_rule("/index/",endpoint="hello",view_func=hello)
 
@app.route('/url1')
def Create_url1():
    return url_for('static',filename="style.css")
 
app.add_url_rule('/attachment/<path:filename>',endpoint='attachment',build_only=True)
@app.route('/url2')
def Create_url2():
    return url_for('attachment',filename="upload.txt")

2.send_from_directory的用法

send_from_directory主要用於下載文件:session

下面是一個文件的下載實例

# encoding=utf-8
from flask import Flask
from flask import g
from flask import send_from_directory
from flask import url_for
import os.path
 
app = Flask(__name__)
dirpath = os.path.join(app.root_path,'upload')
@app.route("/download/<path:filename>")
def downloader(filename):
    return send_from_directory(dirpath,filename,as_attachment=True)

首選在application下創建一個upload目錄,構造upload目錄的絕對路徑。

而後經過瀏覽器輸入指定文件的文件名來下載。

3.static_url_path和static_folder的用法

static_url_path主要用於改變url的path的,靜態文件放在static下面,因此正常狀況url是static/filename ,可是能夠經過static_url_path來改變這個url

static_folder主要是用來改變url的目錄的,默認是static,能夠經過這個變量來改變靜態文件目錄。

# encoding=utf-8
from flask import Flask
from flask import g
from flask import send_from_directory
from flask import url_for
import os.path
 
app = Flask(__name__,static_url_path="/test")
 
@app.route("/")
def static_create():
    return url_for('static',filename='style.css')

4.靜態頁面緩存和文件索引

SEND_FILE_MAX_AGE_DEFAULT 這個變量用於配置靜態文件緩存的時間,Flask默認緩存時間是12hours

例如: app.comfig['SEND_FILE_MAX_AGE_DEFAULT']=2592000 將其緩存時間改成了30天。

Flask不能實現文件索引的功能,也就是沒法列出文件名,這個須要web server(Nginx 或 Apache)來實現。

五、session 也是一個 request context 的變量,但它把數據保存到了 cookie 中併發送到了客戶端,客戶端再次請求的時候又帶上了cookie

  

掃碼關注微信公衆號

微信公衆號

相關文章
相關標籤/搜索