모델에 추가를 완료하였다면 데이터베이스에 적용시키기 위해 makemigrations과 migrate를 해주도록 합니다.
이 때, python manage.py makemigrations 명령어를 입력하게 되면
위와 같이 나오게 되는데 현재 데이터베이스에는 useremail이라는 값이 없이 데이터들이 저장되어 있기 때문에 기존에 있는 데이터들에게 어떤 값을 지정해 줄 것인지 묻는 것입니다. 1번은 직접 여기서 기본값을 입력해 주는 것이고 2번은 모델안에서 default = ‘ ‘ 와 같은 형태로 기본값을 지정해 주겠다는 뜻입니다. 저는 일단 1번을 선택하여 ‘test@gmail.com’이라고 입력해 보도록 하겠습니다.
makemigrations이 완료되었으면 python manage.py migrate 명령어를 입력하여 마이그레이션을 완료합니다.
그럼 이제 register.html 파일로 이동하여 이메일을 입력받는 부분을 추가해줍니다.
from django.shortcuts import render from .models import User from django.http import HttpResponse from django.contrib.auth.hashers import make_password
# Create your views here.
defregister(request): if request.method == 'GET': return render(request, 'user/register.html') elif request.method == 'POST': username = request.POST.get('username', None) # 템플릿에서 입력한 name필드에 있는 값을 키값으로 받아옴 password = request.POST.get('password', None) # 받아온 키값에 값이 없는경우 None값으로 기본값으로 지정 re_password = request.POST.get('re-password', None) useremail = request.POST.get('useremail', None)
res_data = {} # 응답 메세지를 담을 변수(딕셔너리)
ifnot (usernameand and useremail and password and re_password): res_data['error'] = '모든 값을 입력해야 합니다.' elif password != re_password: res_data['error'] = '비밀번호가 다릅니다.' else: user = User( # 모델에서 생성한 클래스를 가져와 객체를 생성 username=username, useremail=useremail, password=make_password(password) # 비밀번호를 암호화하여 저장 )
다음으로는 부트스트랩의 테마를 적용시키기 위해 static파일을 관리하는 방법도 알아보도록 하겠습니다.
먼저 프로젝트폴더 community아래에 static폴더를 생성합니다. 이 폴더 안에 css, javascript등의 파일을 넣고 관리할 것입니다.
community/community/settings.py 맨 아래로 가면
STATIC_URL = ‘/static/‘ 라고 있는 부분 아래에 다음과 같이 추가하여 주도록 합니다.
1 2 3 4 5
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), # static 파일을 접근했을 때, 그 파일이 어느 폴더에 있는지를 알려줌 ] # BASE_DIR이 프로젝트 폴더이기 때문에 그 아래 static폴더에 파일이 있다는 뜻.
이제 부트스트랩 테마 기능을 사용하기 위해 테마를 다운받아 보겠습니다. https://bootswatch.com/ 이곳에서 마음에 드는 테마를 받으시면 됩니다. 저는 slate라는 테마를 사용해 보겠습니다. bootstrap.min.css라는 파일을 다운 받은 뒤 static폴더에 옮겨주도록 하겠습니다.
이제 register.html 로 이동해서 기존 태그를 지워준 뒤 를 추가해주도록 합니다.
1 2 3 4 5 6 7 8 9 10
<head> <!-- Required meta tags --> <metacharset="utf-8"> <metaname="viewport"content="width=device-width, initial-scale=1, shrink-to-fit=no">