亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

藍(lán)圖

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

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

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

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

然后我們?cè)谶@些文件里面開(kāi)始編寫(xiě)代碼。

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

這樣,我們就在定義好了4個(gè)藍(lán)圖,然后我們需要在app.py中區(qū)注冊(cè)藍(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ùn)行項(xiàng)目,輸入對(duì)應(yīng)的url,就能訪問(wèn)到我們的視圖了。這樣,我們就對(duì)我們的項(xiàng)目進(jìn)行了模塊化處理。方便我們的后期維護(hù)。

1. url前綴

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

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

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

首先會(huì)去根目錄下的templates文件夾下面查找模板,如果找到了,那么就直接返回,如果沒(méi)有找到,那么就會(huì)去該藍(lán)圖的同級(jí)目錄下的templates文件下尋找模板。如果找到了,也返回,如果沒(méi)有,就直接報(bào)錯(cuò)。

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

在模板中,我們使用url_for加載靜態(tài)文件的時(shí)候。需要加上我們的藍(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)文件的時(shí)候,需要藍(lán)圖的名字+ . + static這樣才能加載藍(lán)圖下面的靜態(tài)文件。那么我們?cè)谝晥D中怎樣使用url_for呢?

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

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

子域名

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

比如我們定義我們的電影模塊的子域名為movie。子域名的實(shí)現(xiàn)也是通過(guò)藍(lán)圖來(lái)實(shí)現(xiàn)的。我們只需要在初始化藍(lán)圖對(duì)象的時(shí)候,傳入一個(gè)參數(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'

然后我們?cè)鯓釉L問(wèn)我們movie模塊中的額視圖函數(shù)呢?movie.127.0.0.1:5000/movie/這樣嗎?

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

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

那我們?cè)趺礈y(cè)試我們到底有沒(méi)有配置正確呢?難道要去買(mǎi)一個(gè)域名?

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

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

我們打開(kāi)這個(gè)文件,在最下面添加代碼

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

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

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

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

這樣,我們?cè)L問(wèn)我們網(wǎng)站的時(shí)候,就可以使用xxx.com:5000/這個(gè)域名來(lái)訪問(wèn)了。我們?cè)L問(wèn)movie模塊的時(shí)候,也就可以使用movie.xxx.com:5000這個(gè)子域名訪問(wèn)了。

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

相關(guān)文章

最新評(píng)論