본문 바로가기
💻 개발블로그/django

Django심화강의:2주차(04)(20220216)

by August.J 2022. 2. 16.

👍 좋아요 모델 구현하기 / 모델클래스 만들기

 

좋아요 모델에서 필요한 기능 분석 필요

- 좋아요는 게시글에 유저당 한 개만 누를 수 있다.

- 좋아요 카운팅

- 좋아요를 눌렀을 때 버튼 변화

더보기

- 게시글(그것이 댓글이든, 유튜브 영상이든, 블라인드 포스트이든)에 “좋아요”를 누를 수 있다. (이떄 좋아요 개수가 증가한다.)

- 한 사용자는 하나의 게시글에 단 하나의 좋아요만 할 수 있다!

- 이미 좋아요 했는지 여부를 표시해 주어야 한다.

- 이미 좋아요를 했다면, 좋아요 버튼을 다시 누름으로써 좋아요를 취소할 수 있다. (이때 좋아요 개수가 감소한다.) - 게시글의 리스트(최신 게시글이 맨 위로 오도록)를 보여준다. 이 때 좋아요 받은 개수도 같이 보여준다.


>>> 좋아요 모델 구현하기

⭐ 좋아요 앱 생성하기

python manage.py startapp 'app명' ( 예시: python manage.py startapp tabom )

터미널에 입력하고 전체 프로젝트 폴더를 닫았다 열면 앱생성이 보인다.

앱명은 다른 클래스 또는 변수명이 겹치지 않게 만드는 것이 좋다.

 

⭐ 생성한 앱 등록하기 (settings.py)

새로 생성한 tabom 앱을 setting.py -> INSTALLED_APPS에 address를 입력하여 데이터베이스와 싱크할 수 있도록 세팅

앱이름+apps(apps.py에 Config가 들어있다.)+디폴트 카멜형식으로 작성(app이름+Config)

"tabom.apps.TabomConfig",


>>> 모델클래스 만들기

⭐ 디렉토리, 파일 생성

- tabom안의 models.py 삭제, models 파이썬패키지 생성 (model파일을 디렉토리로 변경)

- models디렉토리 안에 article.py, like.py, user.py 파일 생성 __init__.py는 자동생성파일

- 코드 붙여넣기

  *article.py

더보기

from django.db import models


class Article(models.Model):
    title = models.CharField(max_length=255)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

  *like.py

더보기

from django.db import models

from tabom.models.article import Article
from tabom.models.user import User


class Like(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    article = models.ForeignKey(Article, on_delete=models.CASCADE)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

  *user.py

더보기

from django.db import models


class User(models.Model):
    name = models.CharField(max_length=50)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

  *__init__.py

더보기

from tabom.models.article import Article as Article
from tabom.models.like import Like as Like
from tabom.models.user import User as User

⭐ 마이그레이션(migration)

(마이그레이션 과정에서 에러가 발생하였다. MySQL설치 과정 건너뛰었던 문제 - 설치 후 해결)

 

- python manage.py makemigrations tabom

- python manage.py sqlmigrate tabom 0001

- python manage.py migrate

 

>> 데이터베이스 리프레시 후 확인 / 잘 들어왔음을 알 수 있다.


⭐ ./test.sh

Black, isort, mypy 테스트


오류발생

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([WindError 10061])")

마이그레이션 과정에서 에러 발생, MySQL과 데이터베이스를 찾지 못하는 문제같다.

- 해결방법

docker부분 강의 때 windows는 도커실행이 안될 수도 있어서 Mysql을 수동으로 설치해줘야 하는데 건너뛰었다.

Mysql설치

https://dev.mysql.com/downloads/mysql/

 

MySQL :: Download MySQL Community Server

Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86

dev.mysql.com

- 데이터베이스 설정 후 연결테스트로 확인해보기