IT/Django

Django 기초 3.회원가입 페이지 만들기

어센트 2019. 10. 6. 22:15

user template 내부에 register.html파일 생성

 

 

user 앱 내부에url.py 파일 생성후등록


urrls, views수정 후 http://127.0.0.1:8000/sampleuser/register/ 접속 

 


https://getbootstrap.com/docs/4.3/getting-started/introduction/
부트스트랩의 css js meta태그 템플릿을 이용하여 작성

 

Introduction

Get started with Bootstrap, the world’s most popular framework for building responsive, mobile-first sites, with BootstrapCDN and a template starter page.

getbootstrap.com

앱,프로젝트 내부 코드

#models.py
from django.db import models

# Create your models here.


class Sampleuser(models.Model):
    username = models.CharField(max_length=60, 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 = '샘플 사용자'
        
 
 
 
#프로젝트 urls.py   
from django.contrib import admin
from django.urls import path ,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('sampleuser/',include('sampleuser.urls'))
]
 
    
    
    
    
#user 앱 내부에 생성해준 urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register)
]



#sampleuser 앱 내부 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으로 설정
        password = request.POST.get('password', None)
        re_password = request.POST.get('re-password', None)

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

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

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





#프로젝트 내부 manage.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sample_community.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

templates 안의 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="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>

 

 

python manage.py runserver 명령후 http://127.0.0.1:8000/sampleuser/register/ 접속한 화면 

작성안한 란이 있는지 검사하는 부분과 비밀번호와 비밀번호 확인란이 일치하는지 검사하는 부분도 추가적으로 views.py에 구현