Django configuration
Django configuration
Django
To run Django on the Engineering web server, use the following hints. In the hints, replace the name samplewebsite with the name of your web site.
Starting a project
To start a new project, go to the top directory for the web site:
cd /web/groups/samplewebsite/public_html
Create a project:
/opt/python/current/bin/django-admin startproject myproject .
Edit the settings:
edit myproject/settings.py
Change the allow hosts to any host:
ALLOWED_HOSTS = ['*']
Set the static directory's root directory:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Change the static URL to the web site's name:
STATIC_URL = '/samplewebsite/static/'
Initialize the project:
./manage.py makemigrations ./manage.py migrate
Create a superuser account:
./manage.py createsuperuser
Create a static directory:
./manage.py collectstatic
.htaccess
Create an .htaccess file to direct the web site to the CGI script:
RewriteEngine On RewriteBase /samplewebsite/ RewriteRule ^db\.sqlite3 - [F] RewriteRule ^manage\.py - [F] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ django.cgi/$1 [QSA,L]
CGI script
Create a CGI script named "django.cgi". Be sure to substitute the name of the web site:
#!/usr/local/bin/python import os, sys WWW_PATH = os.path.dirname(os.path.abspath(__file__)) DJANGO_PROJECT_PATH = os.path.dirname(WWW_PATH) sys.path.append(DJANGO_PROJECT_PATH + "/") sys.path.append(DJANGO_PROJECT_PATH + "/samplewebsite") def run_with_cgi(application): environ = dict(os.environ.items()) environ['wsgi.input'] = sys.stdin environ['wsgi.errors'] = sys.stderr environ['wsgi.version'] = (1,0) environ['wsgi.multithread'] = False environ['wsgi.multiprocess'] = True environ['wsgi.run_once'] = True if environ.get('HTTPS','off') in ('on','1'): environ['wsgi.url_scheme'] = 'https' else: environ['wsgi.url_scheme'] = 'http' headers_set = [] headers_sent = [] def write(data): if not headers_set: raise AssertionError("write() before start_response()") elif not headers_sent: status, response_headers = headers_sent[:] = headers_set sys.stdout.write('Status: %s\r\n' % status) for header in response_headers: sys.stdout.write('%s: %s\r\n' % header) sys.stdout.write('\r\n') sys.stdout.write(data) sys.stdout.flush() def start_response(status,response_headers,exc_info=None): if exc_info: try: if headers_sent: raise exc_info[0], exc_info[1], exc_info[2] finally: exc_info = None elif headers_set: raise AssertionError("Headers already set!") headers_set[:] = [status,response_headers] return write result = application(environ, start_response) try: for data in result: if data: write(data) if not headers_sent: write('') finally: if hasattr(result,'close'): result.close() try: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "samplewebsite.settings") import django.core.wsgi run_with_cgi(django.core.wsgi.get_wsgi_application()) except Exception, inst: print("Content-type: text/html\n\n") print(inst)
Be sure to set the script "django.cgi" to executable with:
chmod +x django.cgi
Last modified: 2020/06/24 12:43:15.749598 GMT-4 by
curtis.f.smith.1
Created: 2018/10/10 13:18:25.284592 GMT-4 by curtis.f.smith.1.
Categories
- Knowledge Base > Web > Apache