Python/Django Framework
[Python Django] 2-2. FBV 함수를 이용한 Create 구현
Jake the Dog
2022. 3. 26. 09:27
반응형
함수를 이용한 CREATE 구현
- views.py와 html 템플릿만을 이용한 가장 단순한 방식의 코드입니다.
- user/views.py
from django.contrib.auth.hashers import make_password
from django.shortcuts import render
from user.models import User
def create(request):
if request.method == 'GET': # method가 GET이면 유저 생성 페이지를 보여준다
return render(request, 'create.html')
elif request.method == 'POST': # method가 POST이면 유저를 생성한다
# 전달받은 인자값을 정리한다
user_name = request.POST.get("user_name", None)
user_email = request.POST.get("user_email", None)
password = request.POST.get("password", None)
re_password = request.POST.get("re_password", None)
res_data = {} # 결과 데이터를 보낼 set 생성
if not (user_name and user_email and password and re_password):# 무결성 검사
res_data['error'] = '모든 값을 입력해주세요'
elif password != re_password: # 패스워드 확인
res_data['error'] = '패스워드를 확인해주세요'
else: # 저장
user = User(
user_name=user_name,
user_email=user_email,
password=make_password(password)
)
user.save() # user 모델에 세팅된 값을 저장한다
if res_data.get('error'):
# POST로 전달받은 값 중 user_name, user_email을 전달한다. 보안상 password 정보는 제외
res_data['preset'] = {'user_name': user_name, 'user_email': user_email}
# POST로 전달받은 전체 값을 전송하려면
# res_data['preset'] = request.POST
return render(request, 'create.html', res_data)
else:
# 성공하더라도 아직 다른 페이지가 없는 관계로 create 페이지로 돌아간다.
# admin 페이지에서 user가 생성되었는지 확인한다.
return render(request, 'create.html', res_data)
- user/templates/create.html
{% extends "base.html" %}
{% block contents %}
<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 method="POST" action=".">
{% csrf_token %}
<div class="mb-3">
<label for="user_name">사용자 이름</label>
<input type="text" class="form-control" id="user_name" placeholder="사용자 이름" name="user_name"
value="{{ preset.user_name }}"/>
</div>
<div class="mb-3">
<label for="user_email">사용자 이메일</label>
<input type="email" class="form-control" id="user_email" placeholder="사용자 이메일" name="user_email"
value="{{ preset.user_email }}"/>
</div>
<div class=" mb-3">
<label for="password">비밀번호</label>
<input type="password" class="form-control" id="password" placeholder="비밀번호" name="password"/>
</div>
<div class="mb-3">
<label for="re_password">비밀번호 확인</label>
<input type="password" class="form-control" id="re_password" placeholder="비밀번호 확인"
name="re_password"/>
</div>
<div class="d-grid mt-3">
<button class="btn btn-lg btn-primary" type="submit">회원가입</button>
</div>
</form>
</div>
</div>
{% endblock %}
반응형