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: https://eng.purdue.edu/jump/23d1fc0
Categories
- Knowledge Base > Web > Apache