Print this article Edit this article

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/python3/3.8/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: Jul 7, 2023 11:41 am GMT-4
Created: Oct 10, 2018 1:18 pm GMT-4 by admin
JumpURL:


Categories