철학과 학생의 개발자 도전기

[프로젝트] MOCO 모각코를 위한 웹서비스 02 - ERD 설계, User 구현 본문

프로젝트

[프로젝트] MOCO 모각코를 위한 웹서비스 02 - ERD 설계, User 구현

Younghun 2022. 8. 8. 11:26

ERD 설계

ERD Cloud

MOCO 서비스를 위한 ERD 설계를 해봤다.

 

사용자(User)가 모각코 모집글(Post)을 올리고 모각코를 위한 장소 소개글(Place)을 올릴 수있도록 ERD를 설계했다.

댓글은 Post와 Place를 통합해서 만들었다. 태그를 통해 어느 엔터티의 댓글인지 표시하고, 클래스를 통해 대댓글인지를 확인한다.

 

생각보다 ERD 설계시 고려할 사항이 많아서 초안을 만든 이후에 실시간으로 추가하고 수정하는 중이다.

모각코 후기 글과 공지사항도 만들어야하는데 우선은 핵심기능부터 Django로 구현하려고 한다. ERD 수정도 그 이후에 할 것 같다.

 

User Model 구현

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    # 유저네임, 비밀번호 상속
    GENDER_CHOICE = [
        ('Male', '남자'),
        ('Female', '여자'),
    ]
    JOB_CHOICE = [
        ('Student', '학생'),
        ('Job_Seeker', '취준생'),
        ('Worker', '직장인'),
        ('Etc', '기타')
    ]
    first_name = None
    last_name = None
    email = models.EmailField()
    name = models.CharField(max_length=25)
    nickname = models.CharField(max_length=25)
    birth = models.DateField(null=True)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICE)
    exp = models.IntegerField(default=0)
    profile_img = models.ImageField(blank=True, null=True)
    job = models.CharField(max_length=10, choices=JOB_CHOICE)
    desc = models.CharField(max_length=100, blank=True, null=True)

Django를 이용해 User 모델을 구현해봤다.

유저네임과 비밀번호는 그대로 상속해서 사용하고 이름은 그냥 name 하나로 사용하도록 만들었다.

이메일도 재선언을 통해 필수 컬럼이 되도록 만들었다. 후에 비밀번호 찾기 등의 기능을 위해서 필요하기 때문이다.

그 외에 모각코 모집 및 지원을 위해 필요한 속성들을 추가했다. 개발을 하면서 계속해서 보완해나가려고 한다.

 

User View 구현

def signup(request):
  if request.method == 'POST':
    form = SignupForm(request.POST)
    if form.is_valid():
      user = form.save()
      auth.login(request, user)
      return redirect('users:main')
    return redirect('users:signup')
  else:
    form = SignupForm()
    return render(request, 'signup.html', {'form' : form})

def login(request):
  if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    user = auth.authenticate(request, username=username, password=password)
    if user is not None:
      auth.login(request, user)
      return redirect('users:main')
    else:
      return render(request, 'login.html')
  else:
    return render(request, 'login.html')

def logout(request):
  auth.logout(request)
  return redirect("users:main")

Django는 회원가입, 로그인, 로그아웃을 쉽게 구현할 수 있다. 회원가입은 form을 이용해 필요한 정보들을 입력받도록 만들었다.  로그인, 로그아웃은 Django auth 모듈을 이용해서 손 쉽게 구현했다. 하지만 사용자에게 에러 메시지를 표시하는 방법은 정확히 몰라서 추가 공부를 통해 개선하려고 한다.