Package: django-wsgiserver
Summarydjango-wsgiserver is a django app for serving Django sites via
CherryPy’s excellent, production ready, pure-python web server without needing to
install all ofCherrypy.  Note that Cherrypy names its server “wsgiserver” but
it is actually a full-blown, multi-threaded http/https web server which has been
used on production sites alone, or more often proxied behind a something like
Apache or nginx.UsesThe wsgiserver component has been used for years in production.  Peter
Baumgartner noted that it solved problems for him on memory on a memory-limited
VPS hosted site[1].  Performance-wise it does well: it can serve up thousands
of requests per second [Piel2010].I have used django-wsgiserver for small production sites, though daemonizedmodwsgianduwsgihave served me well. I use it all the time though during
development. It’s my “pocket-sized” server. completely written in python and it
gives me an instant approximation of the final production environment I use.  In
some ways, it’s much better than the development server which is built into
django: It gives a quick way of running an SSL for sites that require https, and
it has no problem serving pages that do multiple ajax calls that would cause the
built-in runserver to hang.To use django-wsgiserver, I add it to my installed apps in my project settings
file, then do:$ manage.py runwsgiserverand reload my browser page and the problem is fixed.  It’s also useful to see if
some weird effect is being caused by runserver’s process of loading the settings
twice.This project is a slight modification of code form Peter Baumgartner code (seePeter’s
blog post) Peter and others did the work of creating a management command.
I’ve added a few small improvements from my point of view: It doesn’t require
installing cherrypy separately. It uses the same port as the development server
(8000) so I don’t need to re-enter my testing url in my browser, and it works by
default with OS’s like Mac OS 10.6 and Ubuntu 10.04 which prefer binding
localhost to an ip6 address.Feature listmulti-threaded production ready webserver for low to medium traffic sitespure pythonsetuptools/pip installable (so install right in virtualenv)small memory footprintby default replaces mimics the django built-in server, serves admin media by
default for easy testing and deploymentsupports https/sslPlanned featuresserve static media automatically (see django 1.3 static files support)improve autoreload of changed files during developmentRequirementsTo get started using the server, you need nothing outside of django itself and
the project code that you would like to serve up. However, for ssl support, you
may need PyOpenSSL–though the new cherrypy server includes support for using the
python built-in ssl module depending on which version of python you are using.Licensedjango-wsgiserver is BSD licensed based on lincolnloop’s django-cpservers original code.InstallationTo install, django-wsgiserver follows the usual pattern for a django python application.  You have several optionspip install django-wsgiserver OReasy_install django-wsgiserverIf you would like to use the latest possible version, you can use pip and mercurial checkout from bitbucketpip install -e hg+https://bitbucket.org/cleemesser/django-wsgiserver#egg=django-wsgiserverAlternatively you can download the code and install it so that django_wsgiserver is on your PYTHONPATHAfter you used one of the methods above, you need to add django_wsgiserver to your INSTALLED_APPS in your django project’s settings fileUsageTo see how to run the server as a management command, run:$ python manage.py runwsgiserver helpfrom within your project directory. You’ll see something like what’s below:Run this project in CherryPy's production quality http webserver.
Note that it's called wsgiserver but it is actually a complete http server.

  runwsgiserver [options] [wsgi settings] [stop]

  Optional CherryPy server settings: (setting=value)
    host=HOSTNAME         hostname to listen on
                          Defaults to 127.0.0.1,
                          (set to 0.0.0.0 to bind all ip4 interfaces or :: for
                          all ip6 interfaces)
    port=PORTNUM          port to listen on
                          Defaults to 8000
    server_name=STRING    CherryPy's SERVER_NAME environ entry
                          Defaults to localhost
    daemonize=BOOL        whether to detach from terminal
                          Defaults to False
    pidfile=FILE          write the spawned process-id to this file
    workdir=DIRECTORY     change to this directory when daemonizing
    threads=NUMBER        Number of threads for server to use
    ssl_certificate=FILE  SSL certificate file
    ssl_private_key=FILE  SSL private key file
    server_user=STRING    user to run daemonized process
                          Defaults to www-data
    server_group=STRING   group to daemonized process
                          Defaults to www-data
    adminserve=True|False  Serve the django admin media automatically. Useful
                           in development. Defaults to True so turn to False
                           if  using in production.

  Examples:
    Run a "standard" CherryPy server server
      $ manage.py runwsgiserver

    Run a CherryPy server on port 80
  $ manage.py runwsgiserver port=80

Run a CherryPy server as a daemon and write the spawned PID in a file
  $ manage.py runwsgiserver daemonize=true pidfile=/var/run/django-cpwsgi.pid

    Run a CherryPy server using ssl with test certificates located in /tmp
  $ manage.py runwsgiserver ssl_certificate=/tmp/testserver.crt ssl_private_key=/tmp/testserver.keyNotesIf you want to use an installed version of Cherrypy–perhaps because you now have
a more recent version, you only need to change one line of code in (around line
177) of django_wsgiserver/management/commands/run_wsgiserver.py:from django_wsgiserver.wsgiserver import CherryPyWSGIServer as Server
#from cherrypy.wsgiserver import CherryPyWSGIServer as ServerJust comment out the import from django_wsgiserver.wsgiserver and uncomment the import from cherrypy.wsgiserver to make the switch. For SSL use, you need to search and replace  “django_wsigserver.” back to “cherrypy.”To dolooking at settings for serving static media automaticallyI should probably just add a switch to allow use of the native cherrypy installUpload to the cheeseshop/pypi at some point. Done!Consider other server backends: tornado, uwsgiChangelog0.6.10 add import of django.contrib.admin to address issue #5, #60.6.9 typo fix0.6.8 Changed name of bitbucket repo to django-wsgiserver to match it’s pypi name0.6.7 using open().read() in setup file broke setuptools/pip install because README.rst wasn’t included. Created MANIFEST.in file and now include README.rst tests/, docs/0.6.6 fix up cherrypy dependency in ssl that was accidently introduced in the
move to cherrypy.wsgiserver 3.2 branch0.6.5 added mediahandler wsgi application9/6/10 0.6.4 added code to automatically serve the admin media like the
development server does by default. Can turn off on command line for
production.9/6/10 0.6.3 - see if I can get the download to finally include all the
packages–didn’t have wsgiserver!added test project in tests/ directorygot tired of typing run_cp_wsgiserver so did a rename so I could use
runwsgiserver instead.updated wsgiserver to svn r2680 (matches cherrypy version 3.2 beta+). This
fixes some bugs and gives better python 2.6 support.  This version of cherrypy
will also support python 3.x for whenever django starts supporting it.use port 8000 as with django devserver rather than Cherrypy’s default 8088adapted defaults host=127.0.0.1 in order to work with ip4 by default.  This
addresses an issue I first noticed on mac OS 10.6 and later on ubuntu 10.04
where ip6 is active by default. Can get around this by adjusting the host
option.  For binding all ip4 interfaces, set to 0.0.0.0. For all ip6 interfaces
I believe you use ‘::’ You can also bind a specific interface by specifying
host=<specific ip address>  Seehttp://www.cherrypy.org/ticket/711switched code to use run_cp_wsgiserver instead of runcpserverAcknowledgments and ReferencesMany thanks to Peter and lincolnloop for describing how to do this and writing the code.Peter acknowledged idea and code snippets borrowed from Loic d’Anterroches, adapted to run as a management commandNote, there is also similar code on PyPi and athttp://hg.piranha.org.ua/cpserver/maintained by Alexander SolovyovThe latest version of the cherrypy wsgiserver can be retrieved with:svn co http://svn.cherrypy.org/trunk/cherrypy/wsgiserverPeter hosts his code athttp://github.com/lincolnloop/django-cpserver[1]For examplePeter’s blog postdescribes using django_cpserver on a VPS.