슈코딩

[Django] 추천시스템 프로젝트 코드복기 1 본문

개발일지/Project

[Django] 추천시스템 프로젝트 코드복기 1

Roshu 2022. 6. 10. 23:04

 

오늘 쓰는 글은 온전히 이번 프로젝트때 사용한 장고에 익숙해지기위해 

프로젝트 처음부터 코드를 새로운 파일에 다시 써보며 순서를 복기한 글이다. 

 

1. Django 프로젝트 생성 파일지정

 

2. django-admin startapp 앱이름 APP 생성

 

3. settings.py 에 APP 등록

4. 최상위 디렉토리 (manage.py가 있는 경로) 에 my_settings.py 생성후 SECRET_KEY , DATABASES 분리

my_settings.py

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET = {
    'secret': '', #시크릿키
}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
settings.py  시크릿키, 데이터베이스 뺀자리에 넣는 코드

import my_settings

SECRET_KEY = my_settings.SECRET['secret']

DATABASES = my_settings.DATABASES

코드에는 sqlite 지만 프로젝트에선 MySQL을 사용함.(노출되면 안되는 정보가 있음)

.gitignore 에 my_settings.py 추가해서 깃허브에 올리지않도록 함.

 

5. Model 생성

user, detail, animation 각 필요한 Model 생성

genre = models.ManyToManyField(Genre, related_name='animation')

related_name을 설정해주는건 장고의 ORM기능을 활용하기 위해서이다.

MtoM 혹은 Foreign Key를 사용할때 들어가는 related_name 에대한 참고자료

https://fabl1106.github.io/django/2019/05/27/Django-26.-%EC%9E%A5%EA%B3%A0-related_name-%EC%84%A4%EC%A0%95%EB%B0%A9%EB%B2%95.html

 

Django 26. 장고 related_name 설정방법

장고 프로젝트에서 related_name에 대해서 설정하는 방법에 대한 내용입니다. 장고 related_name 설정방법, 장고 related_name, 장고 related_name설정하기

fabl1106.github.io

 

6. python manage.py makemigrations,  python manage.py migrate

->에러 발생

복습을 하다보니 이런문제가 생겼는데 알고보니 settings.py 에 auth.user모델을 지정을 안해줬던것이었다.

AUTH_USER_MODEL = "user.User"

지정을 해준뒤 migration을 하니 잘 실행이 되었다.

DB에 잘들어온 모습을 볼 수 있다.

 

 

7. 템플릿 생성, static폴더 생성

템플릿들은 눈으로 한번 훑고 복사해서 가져오자.

 

8. urls.py 작성 

user, detail, animation에 각 관련된 url들이 들어가있고 

detail urls.py에는 세부정보,애니메이션 하나에 해당하는 상세페이지로 접속해야 하기 때문에 <int:id> 를

url 넣어서 id값으로 고유상세 페이지를 들어갈 수 있게 해주었다.

detail/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('detail/<int:id>', views.animation_detail, name='animation-detail'),
    path('comment/<int:id>', views.comment, name='comment'),
    path('comment/delete/<int:id>', views.delete_comment, name='delete-comment'),
    path('bookmark/<int:id>', views.bookmark, name='bookmark'),
    path('recommend_toggle/<int:id>', views.recommend_toggle, name='recommend_toggle'),
    path('random/', views.random_view, name='random_page'),
]

 

다음글에서는 가장 많은 내용이 담긴 views.py 를 파헤쳐볼 생각이다. 핵심기능들이랑 복잡한 코드가 전부 들어간 부분이라서 에러도 정말 많이 났었던 곳이고 제대로 한번더 복습하고자 하는 목적이다. 

Comments