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