# django expense project
###### tags: `python` `django` `project`
### project link
https://djangoexpenseprojectapp.herokuapp.com/authentication/login?next=/
### other note
https://gitmind.com/app/doc/84846340b87aad15425f28fcf8a24a16
# source
video:
https://www.youtube.com/watch?v=a2Rom1nfHRs&list=PLx-q4INfd95G-wrEjKDAcTB1K-8n1sIiz&index=23&ab_channel=CryceTrulyCryceTruly
source code:
https://github.com/CryceTruly/trulyexpensesyoutube
### prework
source venv/bin/activate
CREATE DATABASE djangoExpenseProject;
GRANT CONNECT ON DATABASE djangoExpenseProject TO test;
work flow:
create app
create project1
create views of project1
### deploy
heroku
https://devcenter.heroku.com/articles/django-app-configuration
```
//Procfile
pip install gunicorn
//settings.py changes
pip install django-heroku
```
libpq5 php
與
libpq-dev python
衝突
heroku set up
make Procfile
run on heroku server:
```
gunicorn djangoExpenseProject.wsgi
```
```
//install heroku cli
sudo snap install --classic heroku
//login heroku cli
heroku login
//create app
heroku create djangoexpenseprojectapp
› Warning: heroku update available from 7.52.0 to 7.54.0.
Creating ⬢ djangoexpenseprojectapp... done
https://djangoexpenseprojectapp.herokuapp.com/ | https://git.heroku.com/djangoexpenseprojectapp.git
//push to heroku
git push heroku
//run command on heroku vm
heroku run bash
//migrate on heroku
python manage.py migrate
```
## Register
### register varify
for the restapi function add the rest framework
```
pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
```
use ajax to show username and email validation
vahttps://hackmd.io/lidate email(same as validate username)
```
pip install validate-email
//the library is a little bit old(2015)
//maybe can find a newer one
```
make usernameSuccessOutput to give user the checking
when the net speed is running low
email varify
### register send email
add setting.py
```
#email
EMAIL_HOST = os.environ.get('EMAIL_HOST')
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
DEFAULT_FROM_EMAIL = os.environ.get('EMAIL_HOST_USER')
EMAIL_USE_TLS = True
EMAIL_PORT = 587 #gmail
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
```
change gmail security setting
https://myaccount.google.com/lesssecureapps?pli=1&rapt=AEjHL4NnRNcyXBMwX6a1XQGCH1LGwhohNI-TqrxdWfOJ50e8fVQie_iILKEzAWSbMed8YY1GzkVHQmw7aluKbfMaYaraBuvLbQ
### use email send token to verify
add url
make token
```
//
pip install six
```
#### check data
```
python manage.py shell
//check all user
>>> from django.contrib.auth.models import User
>>> User.objects.all()
<QuerySet [<User: test>, <User: lj>]>
//check user
>>> user = User.objects.get(username='lj')
//delete all user
>>> User.objects.all().delete()
(2, {'auth.User': 2})
```
### login & logout
protext route (can't go back from logout to login directly)
### design the add_expenses page
breadcrumb:
https://getbootstrap.com/docs/4.0/components/breadcrumb/
### the expense model
create superuser
```
(venv) lj@lj-Aspire-V3-471G:~/PycharmProjects/djangoExpenseProject$ python manage.py createsuperuser
Username: admin
Email address: admin@gmail.com
Password: admin
Password (again):admin
```
### expense CRUD
### use ajax to search
### user preference
settings
user prefernece
model
migration
project url
urls
view
add to index view
### income
startapp
model
setting
make migrations
migrate
### Question
libpq5 php
與
libpq-dev python
衝突
Q: the checking when the net speed is running low is very annoying
.env 如何使用
str byte
### all function in income
### customize django admin
make /home/lj/PycharmProjects/djangoExpenseProject/templates/admin/base_site.html
```
{% extends 'admin/base.html' %}
{% load static %}
{% block branding %}
<h1 id="head">
<img src="{% static 'img/logo.png' %}" width="35" height="35" />
Django Expense Project
</h1>
{% endblock %}
{% block extrastyle%}
<link rel="stylesheet" href="{% static 'css/adminstyle.css'%}" />
{%endblock %}
```
### reset password
use PasswordResetTokenGenerator to generate token
other same as activate user
use multi threading to speed up the send email time
### chart.js
login:
Error:
NoReverseMatch at /authentication/login
Reverse for '' not found. '' is not a valid view function or pattern name.
https://stackoverflow.com/questions/45724006/django-reverse-for-not-found-is-not-a-valid-view-function-or-pattern-na
https://www.chartjs.org/docs/latest/general/colors.html
### export csv, xlsx, pdf
csv: build in
xlsx
```
pip install xlwt
```
pdf
```
pip install weasyprint
```
### need to deep dive
the way django generate token
structure of django auth, because now all I used is build in
I can't really understand how it works
django pagination
### 之後對專案的想法
use mongo db
serialize the category db
show default date when add, edit(finished)
缺點:為了用ajax實現查詢,程式碼參雜python和js->改成全部使用python
在建立一個index 不要把expense當首頁
statistic 獨立件一個 app
### 使用說明
http://127.0.0.1:8000/admin
登入
### 專案中學習到的
### 使用技術
#### django
user system
admin panel
#### frontend
visualize data(chart.js)
bredcrump(html)
django render template
#### deploy
heroku deploy
export file(csv, excel, pdf)