├── .gitignore
├── LICENSE
├── Procfile
├── README.md
├── helloworld
├── __init__.py
├── asgi.py
├── settings.py
├── templates
│ └── helloworld
│ │ └── home.html
├── urls.py
├── views.py
└── wsgi.py
├── manage.py
├── requirements.txt
└── static
└── .keep
/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite3
2 | .env
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Kinsta Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: gunicorn helloworld.wsgi
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Kinsta - Hello World - Django
2 | An example of how to set your Django application up to enable deployment on Kinsta App Hosting services.
3 |
4 | ---
5 | Kinsta is a developer-centric cloud host / PaaS. We’re striving to make it easier for you to share your web projects with your users. Focus on coding and building, and we’ll take care of deployment and provide fast, scalable hosting. + 24/7 expert-only support.
6 |
7 | - [Start your free trial](https://kinsta.com/signup/?product_type=app-db)
8 | - [Application Hosting](https://kinsta.com/application-hosting)
9 | - [Database Hosting](https://kinsta.com/database-hosting)
10 |
11 | ## Dependency Management
12 | Django is a Python-based web framework, so during the build process Kinsta will automatically install dependencies
13 | defined in your `requirements.txt` file.
14 |
15 | The `python manage.py collectstatic` command will also be executed at every build to collect all static files to
16 | the
17 | directory defined in `STATIC_ROOT`.
18 |
19 | ## Environment Variables
20 |
21 | Note that the `SECRET_KEY` should not be stored in your repository, but rather set up in an environment
22 | variable. Set a random string in your newly created app's Settings > Environment variables section and make it
23 | available as both build and runtime variables. Finally, redeploy your application on the Deployments page to
24 | make the changes effective.
25 |
26 | ## Web Server Setup
27 |
28 | ### Start Command
29 | When deploying an application Kinsta will automatically create a processes based on the Procfile in the root of
30 | the repository. Make sure to use this command to run your server:
31 |
32 | ```
33 | web: gunicorn helloworld.wsgi
34 | ```
35 |
36 | ## Watch How to Set Up a Django Application on Kinsta
37 | [](https://www.youtube.com/watch?v=6nbEnnZxisY)
38 |
--------------------------------------------------------------------------------
/helloworld/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinsta/hello-world-django/d8efd435896f1b99afde20c577f8b17cc39c230d/helloworld/__init__.py
--------------------------------------------------------------------------------
/helloworld/asgi.py:
--------------------------------------------------------------------------------
1 | """
2 | ASGI config for helloworld project.
3 |
4 | It exposes the ASGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.asgi import get_asgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'helloworld.settings')
15 |
16 | application = get_asgi_application()
17 |
--------------------------------------------------------------------------------
/helloworld/settings.py:
--------------------------------------------------------------------------------
1 | """
2 | Django settings for helloworld project.
3 |
4 | Generated by 'django-admin startproject' using Django 3.2.15.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/3.2/topics/settings/
8 |
9 | For the full list of settings and their values, see
10 | https://docs.djangoproject.com/en/3.2/ref/settings/
11 | """
12 |
13 | from pathlib import Path
14 | import os
15 |
16 | # Build paths inside the project like this: BASE_DIR / 'subdir'.
17 | BASE_DIR = Path(__file__).resolve().parent.parent
18 |
19 |
20 | # Quick-start development settings - unsuitable for production
21 | # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
22 |
23 | SECRET_KEY = os.environ['SECRET_KEY']
24 |
25 | # SECURITY WARNING: don't run with debug turned on in production!
26 | DEBUG = True
27 |
28 | ALLOWED_HOSTS = ['*']
29 |
30 |
31 | # Application definition
32 |
33 | INSTALLED_APPS = [
34 | 'django.contrib.admin',
35 | 'django.contrib.auth',
36 | 'django.contrib.contenttypes',
37 | 'django.contrib.sessions',
38 | 'django.contrib.messages',
39 | 'django.contrib.staticfiles',
40 | 'helloworld',
41 | ]
42 |
43 | MIDDLEWARE = [
44 | 'django.middleware.security.SecurityMiddleware',
45 | 'django.contrib.sessions.middleware.SessionMiddleware',
46 | 'django.middleware.common.CommonMiddleware',
47 | 'django.middleware.csrf.CsrfViewMiddleware',
48 | 'django.contrib.auth.middleware.AuthenticationMiddleware',
49 | 'django.contrib.messages.middleware.MessageMiddleware',
50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware',
51 | ]
52 |
53 | ROOT_URLCONF = 'helloworld.urls'
54 |
55 | TEMPLATES = [
56 | {
57 | 'BACKEND': 'django.template.backends.django.DjangoTemplates',
58 | 'DIRS': [],
59 | 'APP_DIRS': True,
60 | 'OPTIONS': {
61 | 'context_processors': [
62 | 'django.template.context_processors.debug',
63 | 'django.template.context_processors.request',
64 | 'django.contrib.auth.context_processors.auth',
65 | 'django.contrib.messages.context_processors.messages',
66 | ],
67 | },
68 | },
69 | ]
70 |
71 | WSGI_APPLICATION = 'helloworld.wsgi.application'
72 |
73 |
74 | # Database
75 | # https://docs.djangoproject.com/en/3.2/ref/settings/#databases
76 |
77 | DATABASES = {
78 | 'default': {
79 | 'ENGINE': 'django.db.backends.sqlite3',
80 | 'NAME': BASE_DIR / 'db.sqlite3',
81 | }
82 | }
83 |
84 |
85 | # Password validation
86 | # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
87 |
88 | AUTH_PASSWORD_VALIDATORS = [
89 | {
90 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
91 | },
92 | {
93 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
94 | },
95 | {
96 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
97 | },
98 | {
99 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
100 | },
101 | ]
102 |
103 |
104 | # Internationalization
105 | # https://docs.djangoproject.com/en/3.2/topics/i18n/
106 |
107 | LANGUAGE_CODE = 'en-us'
108 |
109 | TIME_ZONE = 'UTC'
110 |
111 | USE_I18N = True
112 |
113 | USE_L10N = True
114 |
115 | USE_TZ = True
116 |
117 |
118 | # Static files (CSS, JavaScript, Images)
119 | # https://docs.djangoproject.com/en/3.2/howto/static-files/
120 |
121 | STATIC_URL = '/static/'
122 |
123 | STATIC_ROOT = './static'
124 |
125 | # Default primary key field type
126 | # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
127 |
128 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
129 |
--------------------------------------------------------------------------------
/helloworld/templates/helloworld/home.html:
--------------------------------------------------------------------------------
1 |