中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

flask框架藍圖和子域名配置詳解

發布時間:2020-10-10 12:42:25 來源:腳本之家 閱讀:116 作者:stu_xujin 欄目:開發技術

本文實例講述了flask框架藍圖和子域名配置。分享給大家供大家參考,具體如下:

藍圖

在flask項目中,我們所有的url和視圖函數都寫在一個文件app.py中,但是當我們的項目大起來之后,這顯然就不是一個合理的結構了。而藍圖就可以優雅的幫我們實現這個需求,對我們的項目進行分塊。

比如現在的豆瓣網,https://www.douban.com/,他分為好幾個模塊。

有讀書,電影,音樂,同城,FM等模塊,假設我們也需要實現一個類似的網站,用過Django框架的朋友都知道,可以給每個模塊新建一個app,然后相應模塊的代碼寫在對應的app中,這樣也很方便我們對代碼的管理,和后期項目維護,但是在flask中呢。如果我們把所有的代碼都放在app.py文件中的話,那么肯定不好管理和維護。所以我們需要對網站模塊化,每個模塊寫在對應的為止。這里就會使用到我們的藍圖了。

首先我們在項目的跟目錄下新家一個包blueprints,用啦存放我們所有的藍圖(模塊)。然后在這個包里面新建book.py,movie.py,music.py,FM.py文件,對應我們上面讀書,電影,音樂,FM幾個模塊。

然后我們在這些文件里面開始編寫代碼。

book.py

from flask import Blueprint
book_bp = Blueprint('book',__name__)
@book_bp.route('/book/')
def index():
 return 'book index'

movie.py

from flask import Blueprint
movie_bp = Blueprint('movie',__name__)
@movie_bp.route('/movie/')
def index():
  return 'movie index'

music.py

from flask import Blueprint
music_bp = Blueprint('music',__name__)
@music_bp.route('/music/')
def index():
  return 'music index'

FM.py

from flask import Blueprint
FM_bp = Blueprint('FM',__name__)
@FM_bp.route('/fm/')
def index():
  return 'FM index'

代碼解析

  • Blueprint():實例化一個藍圖對象,第一個參數為我們藍圖的名字,第二個參數為藍圖這個拉努文件的位置,我們直接寫__name__就可以了。所以其實藍圖的實例對象和app.py中的flask實例化對象app都一樣,只是多了一個參數,藍圖的名字而已,使用起來都是一樣的。
  • Blueprint(‘xxx',name).route():和app.route()用法一樣,沒有任何差別。

這樣,我們就在定義好了4個藍圖,然后我們需要在app.py中區注冊藍圖。

app.py

from flask import Flask,url_for,jsonify,render_template
from flask import views
# 首先導入我們的藍圖
from blueprints.movie import movie_bp
from blueprints.FM import FM_bp
from blueprints.music import music_bp
from blueprints.movie import movie_bp
app = Flask(__name__)
# app.config['SERVER_NAME'] = 'xujin.com:5000'
app.register_blueprint(movie_bp)
app.register_blueprint(FM_bp)
app.register_blueprint(music_bp)
app.register_blueprint(movie_bp)
if __name__ == '__main__':
  app.run()

然后我們運行項目,輸入對應的url,就能訪問到我們的視圖了。這樣,我們就對我們的項目進行了模塊化處理。方便我們的后期維護。

1. url前綴

有時候我們需要個一些模塊下的視圖函數添加一些url前綴,比如說當訪問電影模塊下面的視圖的時候,url都有一個前綴movie,例如127.0.0.1:5000/movie/index/,127.0.0.1:5000/movie/list/。。。當然我們可以手動的在每一個視圖函數之前添加movie前綴,但是這樣肯定不是最好的選擇。那么在flask中,有沒有更好的實現方式呢?答案當然是有的。在我們初始化藍圖的時候,還有一個參數url_prefix,當我們指定這個參數之后,就會給我們的movie模塊寫的所有視圖函數添加一個前綴了。

movie.py

from flask import Blueprint
movie_bp = Blueprint('movie',__name__,url_prefix='/movie')
@movie_bp.route('/movie/')
def index():
  return 'movie index'

注意:

  • url_prefix參數必須以'/'開始。
  • 當我們傳入了url_prefix參數之后,我們訪問index視圖的時候,url就變為127.0.0.1:5000/movie/movie/了。

2. 藍圖中模板查找規則

首先會去根目錄下的templates文件夾下面查找模板,如果找到了,那么就直接返回,如果沒有找到,那么就會去該藍圖的同級目錄下的templates文件下尋找模板。如果找到了,也返回,如果沒有,就直接報錯。

3. 藍圖中靜態文件查找規則

在模板中,我們使用url_for加載靜態文件的時候。需要加上我們的藍圖名.

<!-- 去藍圖下面的static文件夾下尋找靜態文件 藍圖名.static -->
<link rel="stylesheet" href="{{ url_for('movie.static',filename='index.css') }}" rel="external nofollow" >
<!-- 根目錄下的static文件夾下尋找靜態文件 -->
<link rel="stylesheet" href="{{ url_for('static',filename='index.css') }}" rel="external nofollow" >

4. 藍圖中使用url_for

我們知道在模板中加載靜態文件的時候,需要藍圖的名字+ . + static這樣才能加載藍圖下面的靜態文件。那么我們在視圖中怎樣使用url_for呢?

其實和模板中使用方法一樣,都需要藍圖的名字。例如,得到movie模塊下index的url。

# 藍圖的名字 + . + 站點名(函數的名字)
url_for('movie.index')

子域名

子域名下載很多網站都是使用了,還是比如我們的額豆瓣,大家可以看到,讀書模塊下的網址都是book.douban.com,電影下面的都是movie.douban.com。那么我們也可以這樣定義我們的額子域名。

比如我們定義我們的電影模塊的子域名為movie。子域名的實現也是通過藍圖來實現的。我們只需要在初始化藍圖對象的時候,傳入一個參數就可以了。

movie.py

from flask import Blueprint
movie_bp = Blueprint('movie',__name__,subdomain='movie')
@movie_bp.route('/movie/')
def index():
  return 'movie index'

我們還得在app.py中配置服務器的名字。

app.config['SERVER_NAME'] = '127.0.0.1:5000'

然后我們怎樣訪問我們movie模塊中的額視圖函數呢?movie.127.0.0.1:5000/movie/這樣嗎?

我們來嘗試一下,在瀏覽器中輸入網址。然后我們發現并訪問不了?是我們沒有配置正確嗎?

答案當然是否定的。這是因為127.0.0.1不支持子域名額配置,那么localhost支持嗎?localhost也是不支持的?

那我們怎么測試我們到底有沒有配置正確呢?難道要去買一個域名?

當然不用,我們修改一下我們電腦的hosts文件就可以了。

windows下hosts文件存放位置為C:\Windows\System32\drivers\etc\hosts

我們打開這個文件,在最下面添加代碼

# 訪問xxx.com的時候 就會找到127.0.0.1
127.0.0.1 xxx.com  # 標準域名配置
127.0.0.1 movie.xxx.com # 子域名配置

如果提示沒有權限修改這個文件,就在外面重新新建一個文件hosts,然后把hosts里面的代碼復制進去,在添加我們的代碼。然后將hosts文件刪除,再講我們新建的hosts放進去。

然后app.py中配置我們的域名。

app.config['SERVER_NAME'] = 'xxx.com:5000'

這樣,我們訪問我們網站的時候,就可以使用xxx.com:5000/這個域名來訪問了。我們訪問movie模塊的時候,也就可以使用movie.xxx.com:5000這個子域名訪問了。

希望本文所述對大家基于flask框架的Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舟山市| 聂拉木县| 闽侯县| 邻水| 无为县| 遂川县| 延川县| 聊城市| 亳州市| 芮城县| 晋宁县| 平凉市| 普陀区| 子长县| 曲沃县| 武隆县| 乐至县| 阿克陶县| 阿图什市| 铁岭县| 巫溪县| 蒙自县| 新和县| 崇文区| 元谋县| 滨州市| 和田市| 佛山市| 平乐县| 保康县| 卓资县| 宁夏| 息烽县| 迁西县| 昭觉县| 天峻县| 福泉市| 辽宁省| 临沧市| 秀山| 台安县|