|
|
|
Dear Diary Project
|
|
|
|
======
|
|
|
|
|
|
|
|
This is notes from course.
|
|
|
|
|
|
|
|
|
|
|
|
Create Project And App
|
|
|
|
-----
|
|
|
|
1. Under `undestanding-django` directory, create project `dear_diary`
|
|
|
|
```
|
|
|
|
$ pipenv install
|
|
|
|
$ pipenv shell
|
|
|
|
$ django-admin startproject dear_diary
|
|
|
|
```
|
|
|
|
|
|
|
|
2. Go to `dear_diary` directory and create app `entries`
|
|
|
|
```
|
|
|
|
$ cd dear_diary
|
|
|
|
$ python manage.py startapp entries
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
App Files
|
|
|
|
-----
|
|
|
|
|
|
|
|
* migrations - For database versioning.
|
|
|
|
* [admin.py](./entries/admin.py) - Register models appearing at admin dashboard.
|
|
|
|
* [models.py](./entries/models.py) - Control whats save in your database.
|
|
|
|
* [tests.py](./entries/tests.py) - Tests for this app
|
|
|
|
* [views.py](./entries/views.py) - (Render views/Response) for url
|
|
|
|
|
|
|
|
|
|
|
|
Admin Dashboard
|
|
|
|
-----
|
|
|
|
|
|
|
|
1. Initialize database (Default generate `db.sqlite3`)
|
|
|
|
```
|
|
|
|
$ python manage.py migrate
|
|
|
|
|
|
|
|
Operations to perform:
|
|
|
|
Apply all migrations: admin, auth, contenttypes, sessions
|
|
|
|
Running migrations:
|
|
|
|
Applying contenttypes.0001_initial... OK
|
|
|
|
Applying auth.0001_initial... OK
|
|
|
|
Applying admin.0001_initial... OK
|
|
|
|
Applying admin.0002_logentry_remove_auto_add... OK
|
|
|
|
Applying admin.0003_logentry_add_action_flag_choices... OK
|
|
|
|
Applying contenttypes.0002_remove_content_type_name... OK
|
|
|
|
Applying auth.0002_alter_permission_name_max_length... OK
|
|
|
|
Applying auth.0003_alter_user_email_max_length... OK
|
|
|
|
Applying auth.0004_alter_user_username_opts... OK
|
|
|
|
Applying auth.0005_alter_user_last_login_null... OK
|
|
|
|
Applying auth.0006_require_contenttypes_0002... OK
|
|
|
|
Applying auth.0007_alter_validators_add_error_messages... OK
|
|
|
|
Applying auth.0008_alter_user_username_max_length... OK
|
|
|
|
Applying auth.0009_alter_user_last_name_max_length... OK
|
|
|
|
Applying auth.0010_alter_group_name_max_length... OK
|
|
|
|
Applying auth.0011_update_proxy_permissions... OK
|
|
|
|
Applying sessions.0001_initial... OK
|
|
|
|
```
|
|
|
|
|
|
|
|
2. Create superuser
|
|
|
|
```
|
|
|
|
$ python manage.py createsuperuser
|
|
|
|
Username (leave blank to use 'bobson'):
|
|
|
|
Email address: bobson.lin@aiwill.tech
|
|
|
|
Password:
|
|
|
|
Password (again):
|
|
|
|
Superuser created successfully.
|
|
|
|
```
|
|
|
|
|
|
|
|
3. Run project (http://127.0.0.1:8000/admin will show admin dashboard)
|
|
|
|
```
|
|
|
|
$ python manage.py runserver
|
|
|
|
|
|
|
|
Watching for file changes with StatReloader
|
|
|
|
Performing system checks...
|
|
|
|
|
|
|
|
System check identified no issues (0 silenced).
|
|
|
|
June 21, 2019 - 03:24:05
|
|
|
|
Django version 2.2.2, using settings 'dear_diary.settings'
|
|
|
|
Starting development server at http://127.0.0.1:8000/
|
|
|
|
Quit the server with CONTROL-C.
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Display Templates
|
|
|
|
-----
|
|
|
|
1. Create templates directory for `entries` app
|
|
|
|
2. Create functions(index, add) in [views.py](./entries/views.py)
|
|
|
|
3. Create [entries/urls.py](./entries/urls.py) and adjust [dear_diary/urls.py](./dear_diary/urls.py)
|
|
|
|
4. Add `entries` app in [settings.py](./dear_diary/settings.py) `INSTALLED_APPS` section
|
|
|
|
|
|
|
|
|
|
|
|
Add Page Link
|
|
|
|
-----
|
|
|
|
1. Use `name` argument in `django.urls.path` function.
|
|
|
|
2. In template file(*.html), add `{% url '[name]' %}` (eg. `{% url 'add' %}` for `/add` url)
|
|
|
|
|
|
|
|
|
|
|
|
Create Entry Model
|
|
|
|
-----
|
|
|
|
1. Add Entry model class in [models.py](./entries/models.py)
|
|
|
|
2. Register Entry model in [admin.py](./entries/admin.py)
|
|
|
|
3. Run command to create migration file and do migration.
|
|
|
|
```
|
|
|
|
$ python manage.py makemigrations
|
|
|
|
Migrations for 'entries':
|
|
|
|
entries/migrations/0001_initial.py
|
|
|
|
- Create model Entry
|
|
|
|
|
|
|
|
$ python manage.py migrate
|
|
|
|
Operations to perform:
|
|
|
|
Apply all migrations: admin, auth, contenttypes, entries, sessions
|
|
|
|
Running migrations:
|
|
|
|
Applying entries.0001_initial... OK
|
|
|
|
```
|
|
|
|
4. Check http://127.0.0.1:8000/admin
|
|
|
|
|
|
|
|
|
|
|
|
Display Entries From Database
|
|
|
|
-----
|
|
|
|
1. Query entries in `views.index` function.
|
|
|
|
2. Use for loop in `index.html` template.
|
|
|
|
|
|
|
|
|
|
|
|
Creating A Form
|
|
|
|
-----
|
|
|
|
1. Create `EntryForm` in [entries/forms.py](./entries/forms.py).
|
|
|
|
2. Use `EntryForm` in `views.add` function.
|
|
|
|
3. Use form in `add.html` template.
|