用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

最近使用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng) 强经,需要將這兩個(gè)不同的項(xiàng)目部署到同一個(gè)服務(wù)里面,然后使用不同的域名來(lái)訪(fǎng)問(wèn)不同的項(xiàng)目寺渗。Django默認(rèn)的只支持單服務(wù)訪(fǎng)問(wèn)匿情,要想實(shí)現(xiàn)不同域名,需要安裝django的第三方擴(kuò)展包:django-hosts信殊。

本文通過(guò)一個(gè)簡(jiǎn)單的demo來(lái)給演示炬称, 看本文的前提是需要對(duì)django有一定的認(rèn)識(shí),對(duì)項(xiàng)目環(huán)境的搭建以及Nginx有一定的了解涡拘。

一.搭建環(huán)境與項(xiàng)目:

平時(shí)習(xí)慣使用Anconda來(lái)管理Python包玲躯,所以本文也使用anconda管理環(huán)境,當(dāng)然大家要是習(xí)慣使用virtuallen管理環(huán)境也沒(méi)有問(wèn)題鲸伴。本文主要是演示怎么完整搭建一個(gè)單服務(wù)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)的流程府蔗,不涉及具體的業(yè)務(wù)流程晋控。

由于生成django項(xiàng)目需要先下載django包汞窗,所以我們先創(chuàng)建一個(gè)基本的虛擬環(huán)境,然后在虛擬環(huán)境中通過(guò)具體命令來(lái)生成項(xiàng)目文件赡译。

1仲吏、環(huán)境搭建:applite_web

conda create --name applite_web

創(chuàng)建完虛擬環(huán)境applite_web了,現(xiàn)在需要下載一些依賴(lài)包蝌焚。這里只需要單獨(dú)安裝django與django-hosts即可裹唆。

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2、創(chuàng)建項(xiàng)目:applite_web

django-admin.py startproject applite_web

3只洒、創(chuàng)建app

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

說(shuō)明2點(diǎn):

  • 根據(jù)項(xiàng)目的需要许帐,將原來(lái)Django項(xiàng)目結(jié)構(gòu)做了調(diào)整
  • 至于創(chuàng)建4個(gè)app的用法后邊會(huì)具體涉及到

下面截圖是創(chuàng)建本文Demo項(xiàng)目結(jié)構(gòu),當(dāng)然這也是比較簡(jiǎn)單的一個(gè)項(xiàng)目結(jié)構(gòu)毕谴,實(shí)際項(xiàng)目開(kāi)發(fā)中成畦,還需要配置別的參數(shù)與文件距芬。

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

二. 在applite_web中配置django-hosts

創(chuàng)建好虛擬環(huán)境和項(xiàng)目之后,接下來(lái)重點(diǎn)就是在django中配置多域名循帐。為了方便起見(jiàn)框仔,本文只演示2個(gè)域名,多個(gè)域名按照2個(gè)域名的方式增加就行拄养。

1离斩、首先在settins.py同級(jí)增加一個(gè)hosts.py文件,配置如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2瘪匿、然后在django的settings配置文件增加3處配置:

在INSTALLED_APPS中增加下面幾個(gè)

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

需要在 MIDDLEWARE 的首行和末行增加2行配置

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

在ROOT_URLCONF下行增加如下2行參數(shù)配置

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

三. 配置url和view

上邊兩步操作完成跛梗,接下來(lái)就需要去app文件夾下,編寫(xiě)對(duì)應(yīng)的url和view棋弥。本文是演示2個(gè)域名茄袖,同時(shí)考慮到一般單個(gè)項(xiàng)目會(huì)有多個(gè)模塊,所以還需要分別配置兩個(gè)url嘁锯。具體的配置如下:

1宪祥、分別在app_1、app_2文件夾下創(chuàng)建urls.py文件家乘,并且增加對(duì)應(yīng)的url,代碼如下:

app_1的urls.py文件如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

app_2的urls.py文件如下

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2蝗羊、然后在app_1_demo、app_2_demo中分別增加對(duì)應(yīng)的url和views函數(shù)

在app_1中匹配成功之后仁锯,會(huì)直接跳轉(zhuǎn)到app_1_demo的urls耀找,再根據(jù)當(dāng)前的匹配跳轉(zhuǎn)當(dāng)前的views函數(shù)

1)、首先匹配app_1_demo的urls的路由:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2)业崖、urls匹配成功之后野芒,跳轉(zhuǎn)這里的視圖函數(shù),并返回響應(yīng)

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

同理双炕,app_2匹配成功之后狞悲,會(huì)直接跳轉(zhuǎn)到app_2_demo的urls,再根據(jù)當(dāng)前的匹配跳轉(zhuǎn)當(dāng)前的views函數(shù)

1)妇斤、首先匹配app_2_demo的urls的路由摇锋,匹配如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2)、urls匹配成功之后站超,跳轉(zhuǎn)這里的視圖函數(shù)荸恕,并返回響應(yīng)

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

四.域名綁定與測(cè)試

經(jīng)過(guò)上邊三步的操作,已經(jīng)完成了一個(gè)基本的演示功能死相。本文目的是通過(guò)Nginx負(fù)載單服務(wù)后融求,在一個(gè)服務(wù)里面來(lái)實(shí)現(xiàn)不同域名的訪(fǎng)問(wèn),所以在配置uwgi和Nginx參數(shù)算撮,還需要綁定域名生宛。

1施掏、這里是在同一個(gè)局域網(wǎng)下通過(guò)兩臺(tái)機(jī)器實(shí)現(xiàn)用戶(hù)的訪(fǎng)問(wèn):

訪(fǎng)問(wèn)機(jī)器IP: 192.168.2.17, 部署服務(wù)的IP: 192.168.2.200茅糜。在實(shí)際生產(chǎn)需要購(gòu)買(mǎi)真實(shí)的域名七芭,這里作為演示,可以通過(guò)在本機(jī)綁定服務(wù)器的ip的方式來(lái)實(shí)現(xiàn)對(duì)另一臺(tái)機(jī)器服務(wù)的訪(fǎng)問(wèn)蔑赘,具體修改如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2狸驳、綁定完之后,然后將本項(xiàng)目放到192.168.2.200機(jī)器上缩赛,測(cè)試當(dāng)前的服務(wù)配置沒(méi)有問(wèn)題耙箍。

項(xiàng)目放置路徑為: /home/yxy/payneli/applite_web/

進(jìn)入app文件夾下,然后運(yùn)行項(xiàng)目酥馍,命令如下:

python manage.py runserver 192.168.2.200:8000

瀏覽器輸入:app1.cc:8000/app1/辩昆,如果瀏覽器顯示如下結(jié)果,說(shuō)明項(xiàng)目配置與域名綁定成功

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

五.uwsgi參數(shù)配置與測(cè)試

前邊幾步成功之后旨袒,接下來(lái)就是配置uwsgi的參數(shù)汁针。熟悉Python后臺(tái)開(kāi)發(fā)的都應(yīng)該清楚,開(kāi)發(fā)的時(shí)候使用的 python manage.py runserver 來(lái)運(yùn)行服務(wù)器砚尽,這只適用開(kāi)發(fā)時(shí)的代碼調(diào)試施无,而實(shí)際項(xiàng)目部署的話(huà),django內(nèi)置的服務(wù)根本無(wú)法滿(mǎn)足需求必孤。而Uwsgi作為Python服務(wù)器不僅可以提供穩(wěn)定的服務(wù)猾骡,同時(shí)還可以提供大的并發(fā)量,所以在后臺(tái)開(kāi)發(fā)中敷搪,用的比較多兴想。

1、在項(xiàng)目文件夾下赡勘,創(chuàng)建一個(gè)uwsgi文件夾嫂便。進(jìn)入該文件夾,創(chuàng)建uwsgi.ini文件狮含,里面的配置參數(shù)如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2顽悼、配置完成后,運(yùn)行下面的命令几迄,啟動(dòng)服務(wù)。

# 在項(xiàng)目路徑下冰评,啟動(dòng)服務(wù)命令如下:
uwsgi --ini ./uwsgi/uwsgi.ini

啟動(dòng)完成后映胁,uwsgi文件夾里面就會(huì)多出兩個(gè)文件:uwsgi.pid uwsgi.sock

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

然后查看當(dāng)前服務(wù)是否啟動(dòng)成功:

# 命令如下
ps -ef|grep uwsgi

當(dāng)顯示如下圖所示的時(shí)候,說(shuō)明uwsgi已經(jīng)將項(xiàng)目啟動(dòng)成功

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

3甲雅、瀏覽器測(cè)試服務(wù)是否正常:

在瀏覽為直接輸入:app1.cc:8000/app1/,如果顯示如下解孙,說(shuō)明uwsgi配置成功

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

六. Nginx配置與測(cè)試

如果前邊5步?jīng)]有問(wèn)題的話(huà)坑填,那么恭喜你,就差最后一步就可以完成本demo的演示了〕诮現(xiàn)在就開(kāi)始最后一步脐瑰,配置Nginx參數(shù)。

1廷臼、首先安裝Nginx苍在,本文對(duì)nginx安裝不做講解,畢竟網(wǎng)上教程那么多荠商,可以找一個(gè)好的教程照著操作就可以寂恬。小編將Nginx安裝為默認(rèn)路徑,在:/usr/local/nginx莱没,進(jìn)入此文件下初肉,直接命令行啟動(dòng)。

/usr/local/nginx/sbin/nginx

查看Nginx是否啟動(dòng)成功饰躲,命令如下:

ps -ef|grep nginx

顯示如下圖牙咏,說(shuō)明Nginx啟動(dòng)成功

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

瀏覽器輸入:app1.cc,顯示如下所示嘹裂,說(shuō)明Nginx安裝成功

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

2眠寿、檢查Nginx配置沒(méi)有問(wèn)題之后,就是配置多域名了焦蘑。

注釋掉Nginx原有的配置server

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

增加如下一行參數(shù)盯拱,主要是為了方便單獨(dú)增加配置app1.cc、與app2.cc兩個(gè)域名的文件

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

分別在 /usr/nginx/conf/文件加下例嘱,創(chuàng)建一個(gè)新的multihosts文件夾狡逢,進(jìn)入該文件夾分別新建 app1.cc.conf、app2.cc.conf文件拼卵,具體的配置參數(shù)如下:

app1.cc.conf配置如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

app2.cc.conf配置如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

3奢浑、多域名的參數(shù)配置完成,但是此刻不要忘了腋腮,當(dāng)使用Nginx作為負(fù)載均衡時(shí)候雀彼,需要將uwsgi.ini里面的參數(shù)http改為socket具體如下:

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

4、到這里本文的參數(shù)已經(jīng)配置完成即寡,然后我們需要重新自動(dòng)Nginx徊哑,查看顯示如上邊啟動(dòng)效果,說(shuō)明啟動(dòng)成功聪富,接下來(lái)就是瀏覽器檢測(cè)多域名配置是否正確:

分別輸入:app1.cc莺丑、app2.cc顯示結(jié)果如下,說(shuō)明多域名已經(jīng)配置成功

用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)
用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)

到此為止,單服務(wù)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)已經(jīng)演示完成梢莽。當(dāng)然萧豆,本文只是做了一個(gè)簡(jiǎn)單的demo版本,而實(shí)際項(xiàng)目開(kāi)發(fā)的過(guò)程中昏名,還需要根據(jù)實(shí)際需要評(píng)估涮雷,決定到底是nginx后臺(tái)負(fù)載多服務(wù),還是nginx負(fù)載單服務(wù)映射多域名轻局。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洪鸭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗽交,更是在濱河造成了極大的恐慌卿嘲,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夫壁,死亡現(xiàn)場(chǎng)離奇詭異拾枣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盒让,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)梅肤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人邑茄,你說(shuō)我怎么就攤上這事姨蝴。” “怎么了肺缕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵左医,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我同木,道長(zhǎng)浮梢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任彤路,我火速辦了婚禮秕硝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洲尊。我一直安慰自己远豺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布坞嘀。 她就那樣靜靜地躺著躯护,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姆吭。 梳的紋絲不亂的頭發(fā)上榛做,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音内狸,去河邊找鬼检眯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛昆淡,可吹牛的內(nèi)容都是我干的锰瘸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼昂灵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼避凝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起眨补,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤管削,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后撑螺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體含思,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年甘晤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了含潘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡线婚,死狀恐怖遏弱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塞弊,我是刑警寧澤漱逸,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站游沿,受9級(jí)特大地震影響饰抒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奏候,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一循集、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔗草,春花似錦咒彤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至模叙,卻和暖如春歇拆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工故觅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厂庇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓输吏,卻偏偏與公主長(zhǎng)得像权旷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贯溅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容