Flask框架(之六)藍圖和子域名
Flask框架藍圖和子域名
一、基於排程方法的檢視
- Flask還為我們提供了另外一種類檢視flask.views.MethodView,對每個HTTP方法執行不同的函式(對映到對應方法的小寫的同名方法上)。
class xxxx(views.MethodView):
def get(self):
pass
def post(self):
pass
- 用類檢視的一個缺陷就是比較難用裝飾器來裝飾
from flask import session
def login_required(func):
def wrapper(*args,**kwargs):
if not session.get("user_id"):
return 'auth failure'
return func(*args,**kwargs)
return wrapper
- 裝飾器寫完後,可以在類檢視中定義一個屬性叫做decorators,然後儲存裝飾器。以後每次呼叫這個類檢視的時候,就會執行這個裝飾器
class UserView(views.MethodView):
decorators = [user_required]
二、藍圖
2.1藍圖
- 之前我們寫的url和檢視函式都是處在同一個檔案,如果專案比較大的話,這顯然不是一個合理的結構,而藍圖可以優雅的幫我們實現這種需求,通過app.register_blueprint()方法將這個藍圖註冊進url對映中,以後訪問/user/,/user/profile/,都是執行的user.py檔案中的檢視函式,這樣就實現了專案的模組化。
from flask import Blueprint
bp = Blueprint('user',__name__,url_prefix='/user/')
@bp.route('/')
def index():
return "使用者首頁"
@bp.route('profile/')
def profile():
return "個人簡介"
2.2尋找靜態檔案
- 預設不設定任何靜態檔案路徑,Jinja2會在專案的static資料夾中尋找靜態檔案。也可以設定其他的路徑,在初始化藍圖的時候,Blueprint這個建構函式,有一個引數static_folder可以指定靜態檔案的路徑,static_folder可以是相對路徑(相對藍圖檔案所在的目錄),也可以是絕對路徑。在配置完藍圖後,還有一個需要注意的地方是如何在模板中引用靜態檔案。在模板中引用藍圖,應該要使用藍圖名+.+static來引用。
bp = Blueprint('admin',__name__,url_prefix='/admin',static_folder='static')
<link href="{{ url_for('admin.static',filename='about.css') }}">
2.3尋找模板檔案
- 跟靜態檔案一樣,預設不設定任何模板檔案的路徑,將會在專案的templates中尋找模板檔案。也可以設定其他的路徑,在建構函式Blueprint中有一個template_folder引數可以設定模板的路徑
bp = Blueprint('admin',__name__,url_prefix='/admin',template_folder='templates')
- 模板檔案和靜態檔案有點區別,以上程式碼寫完以後,如果你渲染一個模板return render_template(‘admin.html’),Flask預設會去專案根目錄下的templates資料夾中查詢admin.html檔案,如果找到了就直接返回,如果沒有找到,才會去藍圖檔案所在的目錄下的templates資料夾中尋找。
2.4url_for生成url
- 用url_for生成藍圖的url,使用的格式是:藍圖名稱+.+檢視函式名稱
url_for('admin.index')
bp = Blueprint('admin',__name__,url_prefix='/admin',template_folder='templates')
三、子域名
- 子域名在許多網站中都用到了,比如一個網站叫做xxx.com,那麼我們可以定義一個子域名cms.xxx.com來作為cms管理系統的網址,子域名的實現一般也是通過藍圖來實現,在之前章節中,我們建立藍圖的時候新增了一個url_prefix=/user作為url字首,那樣我們就可以通過/user/來訪問user下的url。但使用子域名則不需要。另外,還需要配置SERVER_NAME。
from flask import Flask
import admin
# 配置`SERVER_NAME`
app.config['SERVER_NAME'] = 'example.com:8000'
# 註冊藍圖,指定了subdomain
app.register_blueprint(admin.bp)
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8000,debug=True)
- 子域名不能在127.0.0.1上出現,也不能在localhost上出現。
相關文章
- Flask框架:藍圖(Blueprint)測試Flask框架
- Flask框架(二):路由與藍圖Flask框架路由
- Flask框架從入門到精通之藍圖(二十四)Flask框架
- Flask框架從入門到精通之Request(六)Flask框架
- 什麼是子域名?主域名和子域名之間有哪些關係和區別?
- day96:flask:flask-migrate&flask-session&藍圖Blueprint&藍圖的執行機制FlaskSession
- Flask路由與藍圖BlueprintFlask路由
- Flask(9)- 藍圖的基本使用Flask
- Python之Flask框架一PythonFlask框架
- Flask框架之八SQLAlchemy -ormFlask框架SQLORM
- Flask框架從入門到精通之請求鉤子(二十二)Flask框架
- Python學習之Django和Flask框架有什麼區別?PythonDjangoFlask框架
- flask框架中的cookie和sessionFlask框架CookieSession
- Flask框架和Django框架有什麼區別?Flask框架Django
- flask專案之圖書案例Flask
- Python基礎知識之常用框架Flask!Python框架Flask
- Python教程系列之Flask框架的學習PythonFlask框架
- Django框架,Flask框架和Tornado框架各有什麼優缺點Django框架Flask
- flask框架圖書管理系統客戶端Flask框架客戶端
- Flask基本框架Flask框架
- python flask紅圖(Redprint)實現以及自動註冊到藍圖PythonFlask
- 【flask框架】——flask-restful風格Flask框架REST
- flask專案1實戰:2.2 flask框架下使用圖片驗證碼Flask框架
- Flask框架從入門到精通之Session(九)Flask框架Session
- Flask框架從入門到精通之Response(七)Flask框架
- flask框架圖書管理系統伺服器端Flask框架伺服器
- 部署子域名
- Flask框架和Django框架有什麼區別?詳細分析!Flask框架Django
- python的flask框架PythonFlask框架
- flask 框架日誌Flask框架
- Flask框架入門Flask框架
- Flask框架使用藍圖劃分目錄、g物件、使用資料庫連線池連結資料庫Flask框架物件資料庫
- Python基礎知識之常用框架Flask介紹!Python框架Flask
- Flask框架從入門到精通之模型關係(十七)Flask框架模型
- Flask框架從入門到精通之模板表單(二十)Flask框架
- Flask框架從入門到精通之引數配置(二)Flask框架
- Flask框架從入門到精通之模板初識(五)Flask框架
- Flask框架從入門到精通之轉換器(四)Flask框架