장고를 이용해서, 첫번째 프로젝트인 인스타그램 백엔드 클로닝을 진행하고 있다.
첫번째 과제는 회원가입, 로그인, 코멘트 기능을 구현하는 부분이었다. 이 글에서는 회원가입 기능 코드를 작성한 부분을 리뷰한다.
회원정보를 가진 모델 클래스를 작성한다.
Account 클래스는 회원이름(name), 이메일주소(email), 비밀번호(password)의 세가지 속성을 갖는다.
@ models.py
from django.db import models # ORM이 가능하도록 장고에서 models를 import
class Users(models.Model): # models의 내장함수인 Model을 parameter로 받음.
name = models.CharField(max_length = 50)
email = models.CharField(max_length = 50)
password = models.CharField(max_length = 300)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
class Meta:
db_table = 'accounts'
created_at
과 updated_at
의 변수는 장고에서 시간을 자동으로 지정해주는 auto_now_add
와 auto_now
를 사용하기 위해 지정해준다. 기록을 남겨주지는 않기 때문에, 기록을 남기고 싶으면 따로 코드를 작성해야 한다.
auto_now_add
: 최초 DB 입력시간을 뜻한다.auto_now
: 변화가 있을 때, 즉 수정했을때의 시각을 의미한다. 회원가입은 유저가 입력한 정보를 서버에 전달하여 등록하는 과정이 필요하다. 따라서, 이 부분을 처리할 수 있도록 Views의 함수를 정의해야 한다.
함수를 직접 정의하는 대신, 장고가 제공하는 클래스 베이스 뷰(CBV)를 사용하여, 필요한 부분을 상속받아서 사용할 수 있다. 이번 예제에서는 이 방법으로 회원가입을 구현했다.
완성된 코드는 다음과 같다. 하나씩 차근차근 살펴보자.
@ views.py
import json
from .models import Account
from django.views.import View
from django.http import HttpResponse, JsonResponse
class AccountView(View):
def post(self, request):
data = json.loads(request,body)
if Account.objects.filter(email=data['email']).exists():
return JsonResponse({'message':'USER_EXISTS'}, status = 400)
Account(
name = data['name'],
email = data['email'],
password = data['password']
).save()
return HttpResponse(status = 200)
json
), app안에서 불러오는 모듈(.models
), 장고에서 불러오는 모듈(django.
)로 나누었다.json.loads
메소드를 사용하여, body의 정보를 불러오는 코드를 작성하였다.프로젝트의 URL 파일과 Account의 URL 파일을 각각 작성해 준다.
# 프로젝트 URLs
@ urls.py
from django.urls import path, include
urlpatterns = [
path('account', include('account.urls')),
]
account
로 지정해주었다. 프로젝트 urls에서는 경로의 뒤에 /
를 사용하지 않는다. 각 app의 url에서 지할 것이다.# account의 URLs
@ account/urls.py
from django urls import path
from . views import AccountView
urlpatterns = [
path('/sign-up', AccountView.as_view()),
path('', AccoutView.as_view()),
]
account/sign-up
경로를 통하여 접근할 수 있다.