How do you configure Django for simple development and deployment?

后端 未结 14 1549
闹比i
闹比i 2020-11-30 16:14

I tend to use SQLite when doing Django development, but on a live server something more robust is often needed (MySQL/PostgreSQL, for example). Invariably, there are other c

14条回答
  •  渐次进展
    2020-11-30 16:57

    This is an older post but I think if I add this useful library it will simplify things.

    Use django-configuration

    Quickstart

    pip install django-configurations
    

    Then subclass the included configurations.Configuration class in your project's settings.py or any other module you're using to store the settings constants, e.g.:

    # mysite/settings.py
    
    from configurations import Configuration
    
    class Dev(Configuration):
        DEBUG = True
    

    Set the DJANGO_CONFIGURATION environment variable to the name of the class you just created, e.g. in ~/.bashrc:

    export DJANGO_CONFIGURATION=Dev

    and the DJANGO_SETTINGS_MODULE environment variable to the module import path as usual, e.g. in bash:

    export DJANGO_SETTINGS_MODULE=mysite.settings

    Alternatively supply the --configuration option when using Django management commands along the lines of Django's default --settings command line option, e.g.:

    python manage.py runserver --settings=mysite.settings --configuration=Dev

    To enable Django to use your configuration you now have to modify your manage.py or wsgi.py script to use django-configurations' versions of the appropriate starter functions, e.g. a typical manage.py using django-configurations would look like this:

    #!/usr/bin/env python
    
    import os
    import sys
    
    if __name__ == "__main__":
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
        os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')
    
        from configurations.management import execute_from_command_line
    
        execute_from_command_line(sys.argv)
    

    Notice in line 10 we don't use the common tool django.core.management.execute_from_command_line but instead configurations.management.execute_from_command_line.

    The same applies to your wsgi.py file, e.g.:

    import os
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')
    
    from configurations.wsgi import get_wsgi_application
    
    application = get_wsgi_application()
    

    Here we don't use the default django.core.wsgi.get_wsgi_application function but instead configurations.wsgi.get_wsgi_application.

    That's it! You can now use your project with manage.py and your favorite WSGI enabled server.

提交回复
热议问题