까먹을까봐 한번더!
$ python -m venv venv
$ source venv/Scripts/activate
$ pip install django
$ pip freeze > requirements.txt
$ django-admin startproject mytodo **.**
$ python manage.py startapp accounts
$ python manage.py startapp todos
* template/base.html
<body>
<div class="container">
{% block content %}
{% endblock content %}
</div>
<body>
* mytodo/settings
INSTALLED_APPS = [
'accounts',
'todos',...]
'DIRS': [BASE_DIR/'templates']
**AUTH_USER_MODEL = 'accounts.User'**
* mytodo/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/',include('accounts.urls')),
path('todos/',include('todos.urls')),
]
from django.db import models
from django.contrib.auth.models import **AbstractUser**
class User(AbstractUser):
pass
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
class CustomUserCreationForm(UserCreationForm):
Meta 클래스에는 model fields 정보 이외의 정보도 들어있다.
그래서 UserCreationForm이 가지고 있는 Meta class도 같이 상속받을 것
class Meta(UserCreationForm):
model = get_user_model()
추가로 fiels 더 넣고 싶다면
fiels = UserCreationForm.Meta.fields + ('email',)
* todos/models.py
from django.db.models.fields.related import ForeignKey
from django.conf import settings
# Create your models here.
class Todo(models.Model):
title = models.CharField(max_length=100)
# 할 일 목록 -> 지금 생성한 할일 목록은 완료 전이다
completed = models.BooleanField(default=False)
# Foreignkey(Model,on_delete)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
* todo/views
@login_required
def index(request):
로그인한 유저의 Todo list
1은 N을 직접 참조할 수 없다
그래서 manager를 통해서 db api로 접근해야한다.
나를 참조하고 있는 객체의 이름_set
todos = request.user.todo_set.all()
context ={
'todos':todos
}
return render(request,'todo/index.html',context)