https://github.com/kbatuigas/ddapp
A demo app written in Django for creating and managing Dungeons & Dragons campaigns.
https://github.com/kbatuigas/ddapp
database django postgres
Last synced: 3 months ago
JSON representation
A demo app written in Django for creating and managing Dungeons & Dragons campaigns.
- Host: GitHub
- URL: https://github.com/kbatuigas/ddapp
- Owner: kbatuigas
- License: apache-2.0
- Created: 2020-06-04T18:17:47.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-07-15T16:56:22.000Z (almost 6 years ago)
- Last Synced: 2025-03-04T02:42:59.163Z (over 1 year ago)
- Topics: database, django, postgres
- Language: Python
- Homepage:
- Size: 60.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ddapp
## Set up the app
Make sure Python 3 and [psycopg2](https://pypi.org/project/psycopg2/) are installed.
Set up a containerized instance of PostgreSQL:
```
docker run -d -p 5432:5432 -e PG_USER=devuser -e PG_PASSWORD=password -e PG_DATABASE=ddapp --name=ddapp crunchydata/crunchy-postgres-appdev
```
If you have a SQL script to implement the database schema check that `devuser` is the schema owner.
Otherwise execute these statements after setting up the database:
```
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO devuser;
GRANT ALL PRIVILEGES ON ALL sequences IN SCHEMA public TO devuser;
```
Set up a virtual environment and add to project:
Django 2.2.12
[django-crispy-forms](https://django-crispy-forms.readthedocs.io/en/latest/install.html)
Start a new project:
`django-admin startproject ddmanager`
Start a new app:
`py manage.py startapp manager`
Run the **initial migration** to create database tables needed by default Django applications:
`py manage.py migrate`
Add the app and crispy_forms to `INSTALLED_APPS` in **settings.py**:
```
INSTALLED_APPS = [
'manager',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
]
```
Set database connection parameters:
```
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'ddapp',
'USER': 'devuser',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
```
Make sure you've also set a template pack (CSS framework) in settings.py:
`CRISPY_TEMPLATE_PACK = 'bootstrap4'`
Create a superuser before creating any models (or doing anything really):
`python manage.py createsuperuser`
Use `inspectdb` to autogenerate a Django model module to standard output. On the command line
you can pipe it to models.py:
`py manage.py inspectdb > models.py`
## Other notes
* Our registration template (/manager/templates/manager/register.html) is namespaced just in case.
* Django docs says `managed = False` in model class `meta` only pertains to creation and deletion of table, but it also
applies to alter. If you don't change it, no migrations happen.
* Django doesn't handle Postgres composite primary keys.
* Django doesn't do a good job of altering table keys if it didn't create them. If Postgres already
has the correct keys just take them out of the migration file.
* Creating a new auto-generated column on a table asks for a default value during the migration. Just
delete the `default` argument in the migration file.