django全棧(五):django-subdomains實現子域名

買回來的域名多是some.xxx,比如我的allenwu.club。前綴可以不寫也可以寫成www,或者寫成其他有特定含義的子域名。

域名解析

但是要記住不寫與寫www是兩個不同的地址,如果你在服務商那裏綁定ip與域名的時候寫得是固定地址的話。當然在服務商那裏的域名解析可以寫成自動適配的方式,比如將*.allenwu.club綁定到一個ip。這樣所有的子域名都會定向到你的指定ip的主機。然後在主機上做子域名的解析與請求響應。或者多加幾條記錄,把自己的子域名一條條加上去。各有利弊吧。

 

輪子-django-subdomains

django 1.4-1.9的版本可以直接使用。

如果你很不幸地使用了django-2.x的版本,那麼就要自己拿來源碼hack一下了。

我本人使用的是django=2.06,源碼直接下載下來作爲一個app使用。作一些小修改就可以。主要是將一些函數的方法重新找到新版本下包路徑,然後import一下即可。

個人自用,hack後的代碼,僅供參考。https://github.com/junbujianwpl/django-subdomains

 

用法

官網上已經講得比較清楚了。http://django-subdomains.readthedocs.org/

這裏再贅敘一下。

1、django_site表中domain字段值

記得把domain字段改成自己的域名,id=1就對應自己的project裏的settings.py裏的SITE_ID=1相對應。

 

2、修改project裏的settings.py

總共5處,看下面的示例代碼吧。MIDDLEWARE注意放置的順序。

# 1.
INSTALLED_APPS = [
    ...
    'django-subdomains',
]

# 2.
SITE_ID = 1

# 3.
MIDDLEWARE = [
    ...
    'subdomain.middleware.SubdomainURLRoutingMiddleware',
]

# 4.
ROOT_URLCONF = 'mysite.urls'

# 5.
# A dictionary of urlconf module paths, keyed by their subdomain.
SUBDOMAIN_URLCONFS = {
    None: 'mysite.urls',  # no subdomain, e.g. ``example.com``
    'www': 'mysite.urls',
    'blog': 'techblog.urls',
    'stock': 'stockinfo.urls',
}

 

3、修改模板

變化很小,在網址名稱後面插入子域名。如果還有額外的參數,就排在子域名之後。

如下代碼所示,子域名分別是blog、stock、stock、stock。雖然這個變化很小,但是是不可逆的。。。改完之後的代碼在不用子域名模塊的時候是不能用的。。。

{% load tz %}
{% load static %}
{% load subdomainurls %}


...............

            <li class="list-group-item list-group-item-success"><a href="{% url 'home' 'blog' %}">我的博客</a></li>

            <li class="list-group-item list-group-item-success"><a href="{% url 'latest_news' 'stock' %}"> 股市風雲 </a>
            </li>

            <li class="list-group-item list-group-item-success"><a href="{% url 'concept_info' 'stock' %}"> 概念分類</a>

            <li class="list-group-item list-group-item-success"><a href="{% url 'inst_tracker' 'stock' 10 %}">

...............

好的,大功告成。如果要探究子域名的實現原理,可以去看看源碼,不到千行吧。確實這個量級的源代碼真心不多:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章