This example shows how to use Django 4 on Vercel with Serverless Functions using the Python Runtime.
https://django-template.vercel.app/
Our Django application, example
is configured as an installed application in api/settings.py
:
# api/settings.py
INSTALLED_APPS = [
# ...
'example',
]
We allow "*.vercel.app" subdomains in ALLOWED_HOSTS
, in addition to 127.0.0.1:
# api/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:
# api/wsgi.py
app = get_wsgi_application()
The corresponding WSGI_APPLICATION
setting is configured to use the app
variable from the api.wsgi
module:
# api/settings.py
WSGI_APPLICATION = 'api.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 api/urls.py
:
# api/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.
Make sure you create a virtual env. With VSCode, you can cmd + Shift + P and select create venv.
When using postman, select Send
dropdown and select Send and download
python manage.py runserver
Your Django application is now available at http://localhost:8000
.
Deploy the example using Vercel: