python - django中如何共用数据库与不同app绑定不同域名?
黄舟
黄舟 2017-04-17 17:57:55
[Python讨论组]

我有个网站要给做个手机站点,数据库肯定是用现在的app的,而且url的规则也是一样,但是模板不能一样但是问题来了:

因为手机域名是跟电脑是不一样的简单来说就是二级域名,比如电脑是这样www.baidu.com
那么手机站域名就是这样
m.Baidu.com

我的思路是这样的,建立一个新的app,然后url规则,和modles都引用电脑站,然后视图用自己的这样可以吗?
不过就算可以,那如何实战不同app绑定不同域名?

又或则我有一个奇葩的需求,就是不同的django工程用的是同一个数据库呢?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
PHP中文网

既然你的URL都不变,那么你完全不用重新建一个app的,在原来的app上做自动选择模版,比较简单的,CBV就是让你使劲复用的啊。
来先定义一个BaseView:

class BaseView(View):
    @property
    def ismobile(self):
        # 开发的时候你可以直接返回True或者False来调整不同的模版
        return 'm.maidu.com' in self.request.get_host()
    
    def render(self, request, templ_name, context):
        if self.ismobile:
            templ_name = 'mobile/%s'%templ_name
        return render(request, templ_name, context)

后面的其他View都都从这里继承,渲染模版直接用self.render就行了,其它东西都不用变,在templates下面新建mobile文件夹,再重写一套模版就行了。

阿神

我做过类似的事情供你参考,假设项目名称为testsite,app名称为news。

1. 在news app中除了urls.py外,还建另外一个mobileurls.py

在mobileurls.py中的url pattern可以和urls.py中一样,但View不一样。
在不同的view中使用mobile的模板做渲染。
实例代码如下:

  # urls.py
  from django.conf.urls import url
  from .view import pc_news

  urlpatterns = [
      url(r'news', pc_news),
  ]

  # mobileurls.py
  from django.conf.urls import url
  from .view import mobile_news

  urlpatterns = [
      url(r'news', mobile_news),
  ]

2. 在project的urls.py中,为app中两个urls.py添加不同的前缀

  # urls.py
  from django.conf.urls import include, url

  urlpatterns = [
      url(r'^pc/', include('news.urls'),
      url(r'^mobile/', include('news.mobileurls'),
  ]

3. 配置不同的域名对应不同的url
当时我的部署环境是nginx + uwsgi,因此只要配置nginx的配置文件就可以了。

  # nginx.conf
    user              nginx;
    worker_processes  1;

    error_log  /var/log/nginx/error.log;

    pid        /var/run/nginx.pid;

    events {
        worker_connections  1024;
    }

    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  /var/log/nginx/access.log  main;

        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  pc.news.com;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;

            location ~ ^/pc/ {
                include     uwsgi_params;
                uwsgi_pass  unix:/var/run/django.socket;
                uwsgi_param UWSGI_SCRIPT    testsite.wsgi;
                uwsgi_param UWSGI_CHDIR     /opt/testsite/;
                index       index.html index.html;
                client_max_body_size        35M;
            }
        }
        server {
            listen       80;
            server_name  mobile.news.com;

            location ~ ^/mobile/ {
                include     uwsgi_params;
                uwsgi_pass  unix:/var/run/django.socket;
                uwsgi_param UWSGI_SCRIPT    testsite.wsgi;
                uwsgi_param UWSGI_CHDIR     /opt/testsite/;
                index       index.html index.html;
                client_max_body_size        35M;
            }
        }
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号