mirror of
https://github.com/django/django.git
synced 2024-12-27 11:35:53 +00:00
3f1c7b7053
Squashed commit of: commit 508ec9144b35c50794708225b496bde1eb5e60aa Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 22:50:55 2013 +0100 Tweaked default settings file. * Explained why BASE_DIR exists. * Added a link to the database configuration options, and put it in its own section. * Moved sensitive settings that must be changed for production at the top. commit 6515fd2f1aa73a86dc8dbd2ccf512ddb6b140d57 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 14:35:21 2013 +0100 Documented the simplified app & project templates in the changelog. commit 2c5b576c2ea91d84273a019b3d0b3b8b4da72f23 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 13:59:27 2013 +0100 Minor fixes in tutorials 5 and 6. commit 55a51531be8104f21b3cca3f6bf70b0a7139a041 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 13:51:11 2013 +0100 Updated tutorial 2 for the new project template. commit 29ddae87bdaecff12dd31b16b000c01efbde9e20 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 11:58:54 2013 +0100 Updated tutorial 1 for the new project template. commit 0ecb9f6e2514cfd26a678a280d471433375101a3 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 11:29:13 2013 +0100 Adjusted the default URLconf detection to account for the admin. It's now enabled by default. commit 5fb4da0d3d09dac28dd94e3fde92b9d4335c0565 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 10:36:55 2013 +0100 Added security warnings for the most sensitive settings. commit 718d84bd8ac4a42fb4b28ec93965de32680f091e Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 23:24:06 2013 +0100 Used an absolute path for the SQLite database. This ensures the settings file works regardless of which directory django-admin.py / manage.py is invoked from. BASE_DIR got a +1 from a BDFL and another core dev. It doesn't involve the concept of a "Django project"; it's just a convenient way to express relative paths within the source code repository for non-Python files. Thanks Jacob Kaplan-Moss for the suggestion. commit 1b559b4bcda622e10909b68fe5cab90db6727dd9 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 23:22:40 2013 +0100 Removed STATIC_ROOT from the default settings template. It isn't necessary in development, and it confuses beginners to no end. Thanks Carl Meyer for the suggestion. commit a55f141a500bb7c9a1bc259bbe1954c13b199671 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 23:21:43 2013 +0100 Removed MEDIA_ROOT/URL from default settings template. Many sites will never deal with user-uploaded files, and MEDIA_ROOT is complicated to explain. Thanks Carl Meyer for the suggestion. commit 44bf2f2441420fd9429ee9fe1f7207f92dd87e70 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 22:22:09 2013 +0100 Removed logging config. This configuration is applied regardless of the value of LOGGING; duplicating it in LOGGING is confusing. commit eac747e848eaed65fd5f6f254f0a7559d856f88f Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 22:05:31 2013 +0100 Enabled the locale middleware by default. USE_I18N is True by default, and doesn't work well without LocaleMiddleware. commit d806c62b2d00826dc2688c84b092627b8d571cab Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 22:03:16 2013 +0100 Enabled clickjacking protection by default. commit 99152c30e6a15003f0b6737dc78e87adf462aacb Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 22:01:48 2013 +0100 Reorganized settings in logical sections, and trimmed comments. commit d37ffdfcb24b7e0ec7cc113d07190f65fb12fb8a Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:54:11 2013 +0100 Avoided misleading TEMPLATE_DEBUG = DEBUG. According to the docs TEMPLATE_DEBUG works only when DEBUG = True. commit 15d9478d3a9850e85841e7cf09cf83050371c6bf Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:46:25 2013 +0100 Removed STATICFILES_FINDERS/TEMPLATE_LOADERS from default settings file. Only developers with special needs ever need to change these settings. commit 574da0eb5bfb4570883756914b4dbd7e20e1f61e Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:45:01 2013 +0100 Removed STATICFILES/TEMPLATES_DIRS from default settings file. The current best practice is to put static files and templates in applications, for easier testing and deployment. commit 8cb18dbe56629aa1be74718a07e7cc66b4f9c9f0 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:24:16 2013 +0100 Removed settings related to email reporting from default settings file. While handy for small scale projects, it isn't exactly a best practice. commit 8ecbfcb3638058f0c49922540f874a7d802d864f Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 18:54:43 2013 +0100 Documented how to enable the sites framework. commit 23fc91a6fa67d91ddd9d71b1c3e0dc26bdad9841 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:28:59 2013 +0100 Disabled the sites framework by default. RequestSite does the job for single-domain websites. commit c4d82eb8afc0eb8568bf9c4d12644272415e3960 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Tue Jan 29 00:08:33 2013 +0100 Added a default admin.py to the application template. Thanks Ryan D Hiebert for the suggestion. commit 4071dc771e5c44b1c5ebb9beecefb164ae465e22 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 10:59:49 2013 +0100 Enabled the admin by default. Everyone uses the admin. commit c807a31f8d89e7e7fd97380e3023f7983a8b6fcb Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 10:57:05 2013 +0100 Removed admindocs from default project template. commit 09e4ce0e652a97da1a9e285046a91c8ad7a9189c Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:32:52 2013 +0100 Added links to the settings documentation. commit 5b8f5eaef364eb790fcde6f9e86f7d266074cca8 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 11:06:54 2013 +0100 Used a significant example for URLconf includes. commit 908e91d6fcee2a3cb51ca26ecdf12a6a24e69ef8 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 16:22:31 2013 +0100 Moved code comments about WSGI to docs, and rewrote said docs. commit 50417e51996146f891d08ca8b74dcc736a581932 Author: Aymeric Augustin <aymeric.augustin@m4x.org> Date: Mon Jan 28 15:51:50 2013 +0100 Normalized the default application template. Removed the default test that 1 + 1 = 2, because it's been committed way too many times, in too many projects. Added an import of `render` for views, because the first view will often be: def home(request): return render(request, "mysite/home.html")
109 lines
4.2 KiB
Plaintext
109 lines
4.2 KiB
Plaintext
=======================
|
|
How to deploy with WSGI
|
|
=======================
|
|
|
|
Django's primary deployment platform is WSGI_, the Python standard for web
|
|
servers and applications.
|
|
|
|
.. _WSGI: http://www.wsgi.org
|
|
|
|
Django's :djadmin:`startproject` management command sets up a simple default
|
|
WSGI configuration for you, which you can tweak as needed for your project,
|
|
and direct any WSGI-compliant application server to use.
|
|
|
|
Django includes getting-started documentation for the following WSGI servers:
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
modwsgi
|
|
apache-auth
|
|
gunicorn
|
|
uwsgi
|
|
|
|
The ``application`` object
|
|
--------------------------
|
|
|
|
The key concept of deploying with WSGI is the ``application`` callable which
|
|
the application server uses to communicate with your code. It's commonly
|
|
provided as an object named ``application`` in a Python module accessible to
|
|
the server.
|
|
|
|
The :djadmin:`startproject` command creates a file
|
|
:file:`<project_name>/wsgi.py` that contains such an ``application`` callable.
|
|
|
|
It's used both by Django's development server and in production WSGI
|
|
deployments.
|
|
|
|
WSGI servers obtain the path to the ``application`` callable from their
|
|
configuration. Django's built-in servers, namely the :djadmin:`runserver` and
|
|
:djadmin:`runfcgi` commands, read it from the :setting:`WSGI_APPLICATION`
|
|
setting. By default, it's set to ``<project_name>.wsgi.application``, which
|
|
points to the ``application`` callable in :file:`<project_name>/wsgi.py`.
|
|
|
|
Configuring the settings module
|
|
-------------------------------
|
|
|
|
When the WSGI server loads your application, Django needs to import the
|
|
settings module — that's where your entire application is defined.
|
|
|
|
Django uses the :envvar:`DJANGO_SETTINGS_MODULE` environment variable to
|
|
locate the appropriate settings module. It must contain the dotted path to the
|
|
settings module. You can use a different value for development and production;
|
|
it all depends on how you organize your settings.
|
|
|
|
If this variable isn't set, the default :file:`wsgi.py` sets it to
|
|
``mysite.settings``, where ``mysite`` is the name of your project. That's how
|
|
:djadmin:`runserver` discovers the default settings file by default.
|
|
|
|
.. note::
|
|
|
|
Since environment variables are process-wide, this doesn't work when you
|
|
run multiple Django sites in the same process. This happens with mod_wsgi.
|
|
|
|
To avoid this problem, use mod_wsgi's daemon mode with each site in its
|
|
own daemon process, or override the value from the environnemnt by
|
|
enforcing ``os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"`` in
|
|
your :file:`wsgi.py`.
|
|
|
|
|
|
Applying WSGI middleware
|
|
------------------------
|
|
|
|
To apply `WSGI middleware`_ you can simply wrap the application object. For
|
|
istance you could add these lines at the bottom of :file:`wsgi.py`::
|
|
|
|
from helloworld.wsgi import HelloWorldApplication
|
|
application = HelloWorldApplication(application)
|
|
|
|
You could also replace the Django WSGI application with a custom WSGI
|
|
application that later delegates to the Django WSGI application, if you want
|
|
to combine a Django application with a WSGI application of another framework.
|
|
|
|
.. _`WSGI middleware`: http://www.python.org/dev/peps/pep-3333/#middleware-components-that-play-both-sides
|
|
|
|
Upgrading from Django < 1.4
|
|
---------------------------
|
|
|
|
If you're upgrading from Django 1.3.x or earlier, you don't have a
|
|
:file:`wsgi.py` file in your project.
|
|
|
|
You can simply add one to your project's top-level Python package (probably
|
|
next to :file:`settings.py` and :file:`urls.py`) with the contents below::
|
|
|
|
import os
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
|
|
|
|
from django.core.wsgi import get_wsgi_application
|
|
application = get_wsgi_application()
|
|
|
|
The ``os.environ.setdefault`` line just sets the default settings module to
|
|
use, if you haven't explicitly set the :envvar:`DJANGO_SETTINGS_MODULE`
|
|
environment variable. You'll need to edit this line to replace ``mysite`` with
|
|
the name of your project package, so the path to your settings module is
|
|
correct.
|
|
|
|
Also add ``WSGI_APPLICATION = "mysite.wsgi.application"`` in your settings, so
|
|
that :djadmin:`runserver` finds your ``application`` callable. Don't forget to
|
|
replace ``mysite`` with the name of your project in this line.
|