django全栈(五):django-subdomains实现子域名

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/junbujianwpl/article/details/86904985

买回来的域名多是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 %}">

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

好的,大功告成。如果要探究子域名的实现原理,可以去看看源码,不到千行吧。确实这个量级的源代码真心不多:)

展开阅读全文

没有更多推荐了,返回首页