/vercel-django-hello-world

vercel-django-hello-world

Primary LanguagePython

Deploy with Vercel

Django + Vercel

This example shows how to use Django 4 on Vercel with Serverless Functions using the Python Runtime.

Demo

https://django-template.vercel.app/

How it Works

Our Django application, example is configured as an installed application in vercel_app/settings.py:

# vercel_app/settings.py
INSTALLED_APPS = [
    # ...
    'example',
]

We allow "*.vercel.app" subdomains in ALLOWED_HOSTS, in addition to 127.0.0.1:

# vercel_app/settings.py
ALLOWED_HOSTS = ['127.0.0.1', '.vercel.app']

The wsgi module must use a public variable named app to expose the WSGI application:

# vercel_app/wsgi.py
app = get_wsgi_application()

The corresponding WSGI_APPLICATION setting is configured to use the app variable from the vercel_app.wsgi module:

# vercel_app/settings.py
WSGI_APPLICATION = 'vercel_app.wsgi.app'

There is a single view which renders the current time in example/views.py:

# example/views.py
from datetime import datetime

from django.http import HttpResponse


def index(request):
    now = datetime.now()
    html = f'''
    <html>
        <body>
            <h1>Hello from Vercel!</h1>
            <p>The current time is { now }.</p>
        </body>
    </html>
    '''
    return HttpResponse(html)

This view is exposed a URL through example/urls.py:

# example/urls.py
from django.urls import path

from example.views import index


urlpatterns = [
    path('', index),
]

Finally, it's made accessible to the Django server inside vercel_app/urls.py:

# vercel_app/urls.py
from django.urls import path, include

urlpatterns = [
    ...
    path('', include('example.urls')),
]

This example uses the Web Server Gateway Interface (WSGI) with Django to enable handling requests on Vercel with Serverless Functions.

Running Locally

python manage.py runserver

Deploy

npm instal --global yarn
yarn global add vercel
vercel login
vercel  # accept all defaults