본문 바로가기
IT/Django

Django 기초 4.회원필드 수정해보기

by 어센트 2019. 10. 7.
from django.db import models

# Create your models here.


class Sampleuser(models.Model):
    username = models.CharField(max_length=60, verbose_name='사용자명')
    useremail = models.EmailField(max_length=128 ,verbose_name='사용자이메일')
    password = models.CharField(max_length=64, verbose_name='비밀번호')
    
    registered_dttm = models.DateTimeField(auto_now_add=True,
                                           verbose_name='등록시간')

    def __str__(self):
        return self.username
    class Meta:
        db_table = 'sample_sampleuser'
        verbose_name = '샘플 사용자'
        verbose_name_plural = '샘플 사용자'

기존에 회원필드에 유저이름과 비밀번호만 넣었다면 이메일필드를 추가해서 수정하는 것 까지 공부를 했다.

먼저

models.py 내부에 이메일 필드를 하나 추가해준다.

 

 

python manage.py makemigrations 후 디폴트값  1번 입력 후 설정

 

python manage.py migrate 

 

register.html 수정

 

<html>
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />
    <link
      rel="stylesheet"
      href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
      integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
      crossorigin="anonymous"
    />
    <script
      src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
      integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
      integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
      integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
      crossorigin="anonymous"
    ></script>
  </head>
  <body>
    <div class="container">
      <div class="row mt-5">
        <div class="col-12 text-center">
          <h1>회원가입</h1>
        </div>
      </div>

      <div class="row mt-5">
        <div class="col-12">
          {{ error }}
        </div>
      </div>
      <div class="row mt-5">
        <div class="col-12">
          <form action="." method="POST">
            {% csrf_token%}
            <div class="form-group">
              <label for="username">사용자 이름</label>
              <input
                type="text"
                class="form-control"
                id="username"
                placeholder="사용자 이름"
                name="username"
              />
            </div>
            <div class="form-group">
              <label for="useremail">사용자 이메일</label>
              <input
                type="email"
                class="form-control"
                id="useremail"
                placeholder="사용자 이메일"
                name="useremail"
              />
            </div>
            <div class="form-group">
              <label for="password">비밀번호</label>
              <input
                type="password"
                class="form-control"
                id="password"
                placeholder="비밀번호"
                name="password"
              />
            </div>

            <div class="form-group">
              <label for="re-password">비밀번호 확인</label>
              <input
                type="password"
                class="form-control"
                id="password"
                placeholder="비밀번호 확인"
                name="re-password"
              />
            </div>

            <button type="submit" class="btn btn-primary">등록</button>
          </form>
        </div>
      </div>
    </div>
  </body>
</html>

views.py 수정

 

from django.shortcuts import render
from .models import Sampleuser
from django.http import HttpResponse
from django.contrib.auth.hashers import make_password  # make_password함수사용을위해 선언
# Create your views here.


def register(request):
    if request.method == 'GET':  # 주소를 치고 들어갔을때의 경우
        return render(request, 'register.html')
    elif request.method == 'POST':  # 등록을 눌렀을때의 액션
        username = request.POST.get('username', None)  # 초기값 None으로 설정
        useremail = request.POST.get('useremail', None)
        password = request.POST.get('password', None)
        re_password = request.POST.get('re-password', None)

        res_data = {}  # 에러를 받을 딕셔너리 만들어줌
        if not(username and useremail and password and re_password):  # 값 3개가 다들어있지않는경우
            res_data['error'] = '모든 값을 가지지않았습니다'
        elif password != re_password:
            res_data['error'] = '비밀번호가 다릅니다'
        else:

            sampleuser = Sampleuser(
                username=username,
                useremail=useremail,
                password=make_password(password)  # 암호화 후 저장
            )
            sampleuser.save()
        # 데이터 포스트를 하고 다시 html페이지를반환

        return render(request, 'register.html', res_data)
        # res_data를 줘야 에러메시지 출력됨
    # 리퀘스트와 반환하고싶은 html파일 리턴

127.0.0.1:8000/sampleuser/register 에 이메일을 넣고 회원가입하면 이메일정보가  127.0.0.1:8000/admin에들어간다