买回来的域名多是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 %}">
...............
好的,大功告成。如果要探究子域名的实现原理,可以去看看源码,不到千行吧。确实这个量级的源代码真心不多:)