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

Python的Flask框架中配置多個(gè)子域名的方法講解

 更新時(shí)間:2016年06月07日 15:56:49   作者:digwtx  
Fask中可以通過通配符子域的方式來部署多個(gè)子域名,這里我們就來作一個(gè)Python的Flask框架中配置多個(gè)子域名的方法講解,需要的朋友可以參考下

Flask子域名
一般用于數(shù)量比較少的子域名,一個(gè)模塊對(duì)應(yīng)一個(gè)子域名。先看下面一個(gè)例子:

modules.py:

from flask import Blueprint

public = Blueprint('public', __name__)

@public.route('/')
def home():
  return 'hello flask'
app.py:

app = Flask(__name__)
app.config['SERVER_NAME'] = 'example.com'
from modules import public
app.register_blueprint(public, subdomain='public')

現(xiàn)在可以通過public.example.com/來訪問public模塊了。

通配符子域
通配符子域,即通過一個(gè)模塊來匹配很多個(gè)子域名。比如某些網(wǎng)站提供的個(gè)性化域名功能,就是這種形式。

先來看段示例代碼:

modules.py:

from flask import Blueprint

member = Blueprint('member', __name__)

@member.route('/')
def home():
  return g.subdomain
app.py:

app = Flask(__name__)
app.config['SERVER_NAME'] = 'example.com'
from modules import member
app.register_blueprint(member, subdomain='<subdomain>')

這段代碼和上一節(jié)的第像,不同之處是這里的subdomain使用了動(dòng)態(tài)參數(shù)<subdomain>(路由中的URL變量也是這種方式)。我們可以用這個(gè)參數(shù)在請(qǐng)求回調(diào)函數(shù)之前利用的組合的url處理器來獲取相關(guān)的用戶。這樣我們就可以通過*.example.com的形式來訪問member模塊了。

下面是為任何Flask或Blueprint對(duì)象增加子域名支持的便捷函數(shù):

def add_subdomain_to_global(endpoint, values):
  g.subdomain = values.pop('subdomain', None)

def add_subdomain_to_url_params(endpoint, values):
  if not 'subdomain' in values:
    values['subdomain'] = g.subdomain

def add_subdomain_support(app):
  app.url_value_preprocessor(add_subdomain_to_global)
  app.url_defaults(add_subdomain_to_url_params)

然后你可以使用before_request回調(diào)函數(shù)來處理子域名:

add_subdomain_support(blueprint)

@blueprint.before_request
def add_user_to_global():
  g.user = None
  if g.subdomain:
    g.user = User.query.filter_by(username=g.subdomain).first_or_404()

注:這里的blueprint請(qǐng)改為實(shí)際對(duì)象。

特別說明:通配符子域調(diào)試不是不太方便,需要做泛域名解析才可以。修改hosts文件來指定域名的方法是不可行的(子域名較少時(shí)可以逐個(gè)添加,子域名多了就不太現(xiàn)實(shí)了)。本機(jī)調(diào)試時(shí),可以安裝DNS服務(wù)器(比如LINUX BIND服務(wù)等),并做好泛域名解析,然后再進(jìn)行調(diào)試。當(dāng)然使用公網(wǎng)域名和服務(wù)器來調(diào)試也未嘗不可。

PS:
1.如果某個(gè)blueprint默認(rèn)就需要實(shí)用a.domain.com,那么在定義blueprint時(shí)候:

a=Blueprint(‘a(chǎn)' ,__name__,subdomain='a')

這樣,該bp下面的所有url routing走的都是a.domain.com/xxx

2.在某個(gè)具體的url routing定義時(shí),如果需要實(shí)用a.domain.com,那么這么寫:

@www.route(‘/hello',methods=['GET','POST'],subdomain='a')
def xxx():
…..

3.我在具體實(shí)踐中,默認(rèn)的routing都是走的www,這是在__init__.py中:

app.url_map.default_subdomain='www'

其實(shí)就是設(shè)置默認(rèn)子域名,這樣默認(rèn)不做設(shè)置的話,路由走的就是www。
那這個(gè)時(shí)候如果訪問domain.com,即不帶www的話,就會(huì)報(bào)404了,怎么辦呢,我是在nginx層面解決這個(gè)問題的,在nginx.conf增加一個(gè)server:

server {
server_name domain.com;
rewrite ^(.*) http://www.domain.com$1 permanent;
}

相關(guān)文章

  • Python3網(wǎng)絡(luò)爬蟲中的requests高級(jí)用法詳解

    Python3網(wǎng)絡(luò)爬蟲中的requests高級(jí)用法詳解

    本節(jié)我們?cè)賮砹私庀?Requests 的一些高級(jí)用法,如文件上傳,代理設(shè)置,Cookies 設(shè)置等等。感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • python如何運(yùn)行js語句

    python如何運(yùn)行js語句

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python如何運(yùn)行js語句的相關(guān)內(nèi)容,有興趣的朋友們可以參考下。
    2020-09-09
  • 如何在Flask中進(jìn)行異常處理實(shí)例解析

    如何在Flask中進(jìn)行異常處理實(shí)例解析

    這篇文章主要為大家介紹了如何在Flask中進(jìn)行異常處理實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Python linecache.getline()讀取文件中特定一行的腳本

    Python linecache.getline()讀取文件中特定一行的腳本

    Python中使用標(biāo)準(zhǔn)庫中的linecache中的getline方法可以從某個(gè)文件中讀取出特定的一行。
    2008-09-09
  • Python中enumerate()函數(shù)編寫更Pythonic的循環(huán)

    Python中enumerate()函數(shù)編寫更Pythonic的循環(huán)

    本篇文章主要大家通過實(shí)例講述了Python中enumerate()函數(shù)編寫更Pythonic的循環(huán)的知識(shí)點(diǎn),有興趣的朋友參考學(xué)習(xí)下。
    2018-03-03
  • Python實(shí)現(xiàn)21點(diǎn)小游戲的示例代碼

    Python實(shí)現(xiàn)21點(diǎn)小游戲的示例代碼

    1931年,當(dāng)美國(guó)內(nèi)華達(dá)州宣布賭博為合法活動(dòng)時(shí),21點(diǎn)游戲第一次公開出現(xiàn)在內(nèi)華達(dá)州的賭場(chǎng)俱樂部,15年內(nèi),它取代擲骰子游戲,而一舉成為非常流行的賭場(chǎng)莊家參與的賭博游戲。本文將用Python實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的可以了解一下
    2022-09-09
  • 小白教你PyCharm從下載到安裝再到科學(xué)使用PyCharm2020最新激活碼

    小白教你PyCharm從下載到安裝再到科學(xué)使用PyCharm2020最新激活碼

    這篇文章主要介紹了PyCharm最新版從下載到安裝再到科學(xué)使用PyCharm2020最新激活碼,需要的朋友可以參考下
    2020-09-09
  • Python天氣語音播報(bào)小助手

    Python天氣語音播報(bào)小助手

    馬上就要迎來國(guó)慶小長(zhǎng)假了,激不激動(dòng),興不興奮!那今年國(guó)慶:天氣怎么樣?能不能出門逛街?能不能出去旅游?旅游出門就要挑個(gè)好的天氣!下雨天哪兒哪兒都不舒服。今天小編帶大家寫一款Python天氣語音播報(bào)小助手
    2021-09-09
  • python通過post提交數(shù)據(jù)的方法

    python通過post提交數(shù)據(jù)的方法

    這篇文章主要介紹了python通過post提交數(shù)據(jù)的方法,涉及Python使用post方式傳遞數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python中列表的常用操作詳解

    Python中列表的常用操作詳解

    這篇文章主要為大家詳細(xì)介紹了python字典的常用操作方法,主要內(nèi)容包含Python中列表(List)的詳解操作方法,包含創(chuàng)建、訪問、更新、刪除、其它操作等,需要的朋友可以參考下
    2021-09-09

最新評(píng)論