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에 구현