Django 配置多站点多域名的实现步骤

起步

要介绍一个非常方便的 Django 扩展包-- django-hosts 。它能够提供在不同的子域名下访问不同的 app。例如,在项目中有多个应用 app01 、 app02 等,希望通过域名 app01.example.com 访问该应用。

安装与配置

使用 pip 进行安装:

pip install django-hosts

把它加入到 INSTALLED_APPS 中:

INSTALLED_APPS = [
  ...
  'django_hosts',
  ...
]

在中间件 MIDDLEWARE 的 开头和结尾 都添加 HostsResponseMiddleware :

MIDDLEWARE = [
  'django_hosts.middleware.HostsRequestMiddleware', # 头尾都要加

  ...

  'django_hosts.middleware.HostsResponseMiddleware',
]

在 settings.py 添加配置变量:

ROOT_HOSTCONF = 'project_name.hosts' # 模块的路径,不是域名
DEFAULT_HOST = 'www' # Name of the default host, we will create it in the next steps

在settings.py同级目录创建 hosts.py 文件:

project_name/
 |-- __init__.py
 |-- hosts.py # `ROOT_HOSTCONF` 指向这个文件
 |-- settings.py
 |-- urls.py
 +-- wsgi.py

hosts.py 内容为:

from django.conf import settings
from django_hosts import patterns, host

host_patterns = patterns('',
  host('www', settings.ROOT_URLCONF, name='www'), # `name`与`DEFAULT_HOST` 相同
  host('app01', 'app01.urls', name='app01'),
  host('app02', 'app02.urls', name='app02'),
)

URL反向映射与模板

URL 反向映射需要额外一个参数作为 主机 :

from django.shortcuts import render
from django_hosts.resolvers import reverse

def homepage(request):
  homepage_url = reverse('homepage', host='www') # host可以不传,将会使用 DEFAULT_HOST
  user_list_url= reverse('user_list', host='app01')
  return render(request, 'homepage.html', {'homepage_url': homepage_url})

模板上的修改:

{% load hosts %}

<a href="{% host_url 'home' host 'www' %}" rel="external nofollow" >Homepage</a>
<a href="{% host_url 'articles' host 'help' %}" rel="external nofollow" >Help Articles</a>

总结

另外,由于域名不同,它们之间存在跨域问题,认证信息并不共享。更多可以查看官方文档:https://django-hosts.readthedocs.io/en/latest/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 在主机商的共享服务器上部署Django站点的方法

    许多共享主机的服务提供商不允许运行你自己的服务进程,也不允许修改 httpd.conf 文件. 尽管如此,仍然有可能通过Web服务器产生的子进程来运行Django. 记录 如果你要使用服务器的子进程,你没有必要自己去启动FastCGI服务器. Apache会自动产生一些子进程,产生的数量按照需求和配置会有所不同. 在你的Web根目录下,将下面的内容增加到 .htaccess 文件中: AddHandler fastcgi-script .fcgi RewriteEngine On Rewrite

  • Django中的CACHE_BACKEND参数和站点级Cache设置

    CACHE_BACKEND参数 每个缓存后端都可能使用参数. 它们在CACHE_BACKEND设置中以查询字符串形式给出. 有效参数如下: timeout:用于缓存的过期时间,以秒为单位. 这个参数默认被设置为300秒(五分钟). max_entries:对于内存,文件系统和数据库后端,高速缓存允许的最大条目数,超出这个数则旧值将被删除. 这个参数默认是300. cull_percentage :当达到 max_entries 的时候,被删除的条目比率. 实际的比率是 1/cull_percen

  • Python的Django框架下管理站点的基本方法

    对于某一类网站, 管理界面 是基础设施中非常重要的一部分. 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容. 一些常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子. 但是管理界面有一问题: 创建它太繁琐. 当你开发对公众的功能时,网页开发是有趣的,但是创建管理界面通常是千篇一律的. 你必须认证用户,显示并管理表格,验证输入的有效性诸如此类. 这很繁琐

  • 使用Nginx+uWsgi实现Python的Django框架站点动静分离

    由于: Django处理静态文件不太友好: 以后有可能需要处理php或者其他资源的请求: 所以考虑结合nginx,使用nignx做它擅长的路由分发功能:同时做动静分离,即Http请求统一由Nginx进行分发,静态文件由Nginx处理,并返回给客户端:而动态的请求,则分发到uWsgi,由uWsgi再分发给Django进行处理.即客户端 <-> nginx <-> socket <-> uwsgi <-> Django 一.环境 系统:centOS 6 pyth

  • django站点管理详解

    管理界面是基础设施中非常重要的一部分.这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容.Django有自己的自动管理界面.这个特性是这样起作用的:它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作. Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django.contrib.sessions django.contr

  • Django Sitemap 站点地图的实现方法

    Django 中自带了 sitemap框架,用来生成 xml 文件 Sitemap(站点地图)是通知搜索引擎页面的地址,页面的重要性,帮助站点得到比较好的收录. 白话文就是:一个写了你网站的所有url的xml文件,告诉搜索引擎,请及时收录我的这些地址. sitemap 很重要,可以用来通知搜索引擎页面的地址,页面的重要性,帮助站点得到比较好的收录. 开启sitemap功能的步骤 settings.py 文件中 django.contrib.sitemaps 和 django.contrib.si

  • Django中如何防范CSRF跨站点请求伪造攻击的实现

    CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF攻击原理以及过程 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常

  • Django 配置多站点多域名的实现步骤

    起步 要介绍一个非常方便的 Django 扩展包-- django-hosts .它能够提供在不同的子域名下访问不同的 app.例如,在项目中有多个应用 app01 . app02 等,希望通过域名 app01.example.com 访问该应用. 安装与配置 使用 pip 进行安装: pip install django-hosts 把它加入到 INSTALLED_APPS 中: INSTALLED_APPS = [ ... 'django_hosts', ... ] 在中间件 MIDDLEW

  • phpStudy配置多站点多域名方法及遇到的403错误解决方法

    此文不太适合一点不懂多站点多域名的.适合于碰到难处了,一点就透.ok.比较随意. 首先,打开站点域名管理,配置如下,网站域名和目录都可以自己设置,端口重设一个,不要是80了,然后先新增再保存. 打开配置文件vhosts,会看到新增了801端口的东西 在配置文件http.conf中添加 ,在80后添加新端口号 然后在hosts文件中配置下,127.0.0.1 www.aaa.com 再就是,玛德GG了,出现forbidden了,403,没有访问权限. 废了很大劲终于找到了解决方案,下面先复制解决方

  • phpStudy配置多站点多域名和多端口的方法

    本文介绍了phpStudy配置多站点多域名和多端口的方法,分享给大家,也给自己留个笔记 WWW目录下有三个项目目录: a    b    c Apache 默认httpd端口为 80,网站目录为D:\WWW\a 1.配置多域名多站点 第一步:点击"其他选项菜单"=>站点域名管理=>设置如下三个站点域名: (1)网站域名:a.com  网站目录:D:\WWW\a  网站端口:80 (2)网站域名:b.com  网站目录:D:\WWW\b  网站端口:80 (3)网站域名:c.

  • Nginx 配置多站点vhost 的方法

    假设你想在Linux Nginx中用不同的域名访问不同的目录,这时就要配置多个vhost,具体配置如下,假设网站根目录设定在/var/www/ 1.在/var/www/下新建两个目录 /var/www/ushark.net /var/www/ushark.wang 2.编辑/etc/nginx/nginx.conf http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format mai

  • django使用admin站点上传图片的实例

    Django有提供文件系统支持,在Admin站点中可以轻松上传图片.使用Admin站点保存图片,需要安装Python的图片操作包 pip install Pillow 1 配置 默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径.我们可以将上传的文件保存在静态文件目录中,如我们之前设置的static_files目录中在settings.py 文件中添加如下上传保存目录信息 MEDIA_ROOT=os.path.join(BASE_DIR,"static_files/me

  • django 配置阿里云OSS存储media文件的例子

    1. 安装django-aliyun-oss2-storage包 linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装 windows上报错: (python3_sbs) F:\projects\virtualenv\python3_sbs\Scripts>pip install django-aliyun-oss2-storage Collecting django-aliyun-oss2-storage Using cached dj

  • Mac M1 Nginx 配置多站点的实现

    说明: 通过 brew 安装的 nginx 网站根目录: /opt/homebrew/var/www nginx 配置目录: /opt/homebrew/etc/nginx/ 假设: 有项目名称为 TestProject , 域名为 bd.testproject.com 第一步 : 设置 IP 与 域名 映射 (也就是增加 hosts) # 终端 vim /etc/hosts # 增加保存 127.0.0.1 bd.testproject.com 第二步 : 新建站点配置文件目录 # 终端 mk

  • django配置DJANGO_SETTINGS_MODULE的实现

    目录 DJANGO_SETTINGS_MODULE Djangosettings详解 DJANGO_SETTINGS_MODULE 使用Django时要通知Django当前使用的是哪个配置文件.可以改变环境变量 DJANGO_SETTINGS_MODULE 实现这一点. 当我们使用manage.py运行起本地的web服务器时,为了让Django知道使用哪个配置文件,就指定了DJANGO_SETTINGS_MODULE的环境变量的路径,我们看下manage.py import os import

  • Nginx用户认证配置方法详解(域名/目录)

    Nginx可以为某一个域名单独加用户认证,具体做法如下: 1. 生成用户认证的用户名和密码: 复制代码 代码如下: #wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 根据提示输入: 用户名:密码:文件名: 脚本会自动生成认证文件,auth.conf内容如下: 复制代码 代码如下: /usr/local/nginx/conf/auth.conf 2. 为Nginx添加auth认证配置 下面以某域名下面的auth目录为例,在域

  • 详解Nginx配置多站点需要踩的坑

    从Windows下的Apache转移到Linux下的Nginx,发现有很多坑需要踩. 以下就做个简单的记录,方便后来者爬坑. 配置Nginx,一般会遇到以下几个坑: 配置nginx支持pathinfo模式 - 优化URL,隐藏index.php - 同一服务器配置多站点 配置pathinfo模式 在server(也就是你的站点,一个server对应一个站点)中输入以下内容: location ~ ^(.+\.php)(.*)$ { root html/[站点目录]; #配置站点目录路径 fast

随机推荐