简体   繁体   中英

Testing sub-domains in my localhost using Django

I set up django-subdomains following this guide .

I set my subdomain urlconfs as follows:

SUBDOMAIN_URLCONFS = {
     None: 'mysite.urls',
    'www': 'mysite.urls',
    'shop': 'mysite.urls.shop',
    'blog': 'mysite.urls.blog'
}

Everything works nicely, but I can't really test it cause when I run my app on my local host using python manage.py runserver , I can't really add the subdomains. If I put in blog.127.0.0.1:8000, then the browser just takes me to a google search. Is there any way to set my server in such a way that allows for testing? Thanks!

EDIT

If go to http://blog.127.0.0.1:8000 , then the browser says a server cannot be found. Have I made mistake in configuring?

My settings.py

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '*****'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # Sites application
    'django.contrib.sites',

    # My application
    'myapp',
]

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',

    # Sub-domains Middleware
    'subdomains.middleware.SubdomainURLRoutingMiddleware',

    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'mysite.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'mysite.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/1.9/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/

STATIC_URL = '/static/'

# Sub-domains

SITE_ID = 1

SUBDOMAIN_URLCONFS = {
     None: 'mysite.urls',
    'www': 'mysite.urls',
    'blog': 'mysite.urls.blog',
    'shop': 'mysite.urls.shop'
}

I also have this following line in my console:

No handlers could be found for logger "subdomains.middleware"

The missing part of the equation here is DNS. As far as the browser is concerned, foo.example.org and example.org are two different hostnames. The name foo.example.org could point to a different ip address entirely from example.org .

The relationship between those two names is that they share an authoritative DNS server, ie, whoever controls the DNS configuration for example.org should also be in control of the DNS configuration for foo.example.org , bar.example.org and so on.

The subdomain django middleware is useful when you have multiple subdomains that happen to point to the same server. When I go to example.org in my browser, my browser sends a Host header with the value example.org . If I visit foo.example.org , the value of the host header is foo.example.org . So if the same server is listening on both names, it can tell which subdomain I'm on -- and that's what allows you to use different routes for different subdomains in django.

If you want to test subdomains on your local host, you need your browser to resolve multiple subdomains as '127.0.0.1'. The way you do this depends on your OS. If you're using linux, you would edit /etc/hosts . What is your OS?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM