Skip to content

Commit e4a031d

Browse files
authored
Merge pull request #34 from realpython/django-migrations
Added example project for article 'Django Migrations: A Primer
2 parents 84c1fe5 + e5bfff6 commit e4a031d

File tree

16 files changed

+251
-0
lines changed

16 files changed

+251
-0
lines changed

django-migrations/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Django Migrations: A Primer
2+
3+
This directory contains the Django project created in the article [Django Migrations: A Primer](https://realpython.com/django-migrations-a-primer/).
4+
5+
It is also used in the follow up article [Digging Deeper into Migrations](https://realpython.com/digging-deeper-into-migrations/).
6+
7+
**Note:** The code in this directory has been reformatted with black and might therefore differ slightly in codestyle from the code originally generated by Django.
8+
9+
## Installation
10+
11+
This Project has been tested with Python 3.6 and Django 2.1, but you should be able to run it with an Django 2.x and a compatible Python. The recommended way to install it is using `pip` and a virtualenv:
12+
13+
$ python3 -m venv .venv
14+
$ source .venv/bin/activate
15+
(.venv) $ pip install "Django==2.*"

django-migrations/bitcoin_tracker/bitcoin_tracker/__init__.py

Whitespace-only changes.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
"""
2+
Django settings for bitcoin_tracker project.
3+
4+
Generated by 'django-admin startproject' using Django 2.1.5.
5+
6+
For more information on this file, see
7+
https://docs.djangoproject.com/en/2.1/topics/settings/
8+
9+
For the full list of settings and their values, see
10+
https://docs.djangoproject.com/en/2.1/ref/settings/
11+
"""
12+
13+
import os
14+
15+
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
16+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17+
18+
19+
# Quick-start development settings - unsuitable for production
20+
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
21+
22+
# SECURITY WARNING: keep the secret key used in production secret!
23+
SECRET_KEY = "dyf)n0fejvk73!&k5_uq4ce7=e6-0+7sy)rm$w=@rg_!xk!5n3"
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+
"historical_data",
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 = "bitcoin_tracker.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 = "bitcoin_tracker.wsgi.application"
72+
73+
74+
# Database
75+
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
76+
77+
DATABASES = {
78+
"default": {
79+
"ENGINE": "django.db.backends.sqlite3",
80+
"NAME": os.path.join(BASE_DIR, "db.sqlite3"),
81+
}
82+
}
83+
84+
85+
# Password validation
86+
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
87+
88+
AUTH_PASSWORD_VALIDATORS = [
89+
{
90+
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator" # noqa
91+
},
92+
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
93+
{
94+
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator" # noqa
95+
},
96+
{
97+
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator" # noqa
98+
},
99+
]
100+
101+
102+
# Internationalization
103+
# https://docs.djangoproject.com/en/2.1/topics/i18n/
104+
105+
LANGUAGE_CODE = "en-us"
106+
107+
TIME_ZONE = "UTC"
108+
109+
USE_I18N = True
110+
111+
USE_L10N = True
112+
113+
USE_TZ = True
114+
115+
116+
# Static files (CSS, JavaScript, Images)
117+
# https://docs.djangoproject.com/en/2.1/howto/static-files/
118+
119+
STATIC_URL = "/static/"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""bitcoin_tracker URL Configuration
2+
3+
The `urlpatterns` list routes URLs to views. For more information please see:
4+
https://docs.djangoproject.com/en/2.1/topics/http/urls/
5+
Examples:
6+
Function views
7+
1. Add an import: from my_app import views
8+
2. Add a URL to urlpatterns: path('', views.home, name='home')
9+
Class-based views
10+
1. Add an import: from other_app.views import Home
11+
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
12+
Including another URLconf
13+
1. Import the include() function: from django.urls import include, path
14+
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
15+
"""
16+
from django.contrib import admin
17+
from django.urls import path
18+
19+
urlpatterns = [path("admin/", admin.site.urls)]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""
2+
WSGI config for bitcoin_tracker project.
3+
4+
It exposes the WSGI callable as a module-level variable named ``application``.
5+
6+
For more information on this file, see
7+
https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
8+
"""
9+
10+
import os
11+
12+
from django.core.wsgi import get_wsgi_application
13+
14+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bitcoin_tracker.settings")
15+
16+
application = get_wsgi_application()
136 KB
Binary file not shown.

django-migrations/bitcoin_tracker/historical_data/__init__.py

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin # noqa
2+
3+
# Register your models here.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class HistoricalDataConfig(AppConfig):
5+
name = "historical_data"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Generated by Django 2.1.5 on 2019-02-05 20:23
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
initial = True
9+
10+
dependencies = []
11+
12+
operations = [
13+
migrations.CreateModel(
14+
name="PriceHistory",
15+
fields=[
16+
(
17+
"id",
18+
models.AutoField(
19+
auto_created=True,
20+
primary_key=True,
21+
serialize=False,
22+
verbose_name="ID",
23+
),
24+
),
25+
("date", models.DateTimeField(auto_now_add=True)),
26+
("price", models.DecimalField(decimal_places=2, max_digits=7)),
27+
("volume", models.PositiveIntegerField()),
28+
],
29+
)
30+
]

0 commit comments

Comments
 (0)