欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

flask框架藍(lán)圖和子域名配置詳解

 更新時間:2020年01月25日 10:47:13   作者:stu_xujin  
這篇文章主要介紹了flask框架藍(lán)圖和子域名配置,結(jié)合實例形式詳細(xì)分析了flask框架藍(lán)圖和子域名配置相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下

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

藍(lán)圖

在flask項目中,我們所有的url和視圖函數(shù)都寫在一個文件app.py中,但是當(dāng)我們的項目大起來之后,這顯然就不是一個合理的結(jié)構(gòu)了。而藍(lán)圖就可以優(yōu)雅的幫我們實現(xiàn)這個需求,對我們的項目進(jìn)行分塊。

比如現(xiàn)在的豆瓣網(wǎng),https://www.douban.com/,他分為好幾個模塊。

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

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

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

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

這樣,我們就在定義好了4個藍(lán)圖,然后我們需要在app.py中區(qū)注冊藍(lán)圖。

app.py

from flask import Flask,url_for,jsonify,render_template
from flask import views
# 首先導(dǎo)入我們的藍(lán)圖
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()

然后我們運行項目,輸入對應(yīng)的url,就能訪問到我們的視圖了。這樣,我們就對我們的項目進(jìn)行了模塊化處理。方便我們的后期維護(hù)。

1. url前綴

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

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參數(shù)必須以'/'開始。
  • 當(dāng)我們傳入了url_prefix參數(shù)之后,我們訪問index視圖的時候,url就變?yōu)?span style="color: #0000ff">127.0.0.1:5000/movie/movie/了。

2. 藍(lán)圖中模板查找規(guī)則

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

3. 藍(lán)圖中靜態(tài)文件查找規(guī)則

在模板中,我們使用url_for加載靜態(tài)文件的時候。需要加上我們的藍(lán)圖名.

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

4. 藍(lán)圖中使用url_for

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

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

# 藍(lán)圖的名字 + . + 站點名(函數(shù)的名字)
url_for('movie.index')

子域名

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

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

movie.py

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

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

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

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

我們來嘗試一下,在瀏覽器中輸入網(wǎng)址。然后我們發(fā)現(xiàn)并訪問不了?是我們沒有配置正確嗎?

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

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

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

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

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

# 訪問xxx.com的時候 就會找到127.0.0.1
127.0.0.1 xxx.com  # 標(biāo)準(zhǔn)域名配置
127.0.0.1 movie.xxx.com # 子域名配置

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

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

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

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

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

相關(guān)文章

最新評論