회원가입을 통해 사용자입력 저장하기.
/sign-up으로 접속하면 회원가입 화면을 보여준다.
POST 방식으로
데이터 통신
모든 과정이 사용자와 관련이 있다 > user 앱에서 진행.
user의 views.py를 수정한다.
from django.shortcuts import render
# Create your views here.
def sign_up_view(request):
return render(request, 'user/signup.html')
def sign_in_view(request):
return render(request, 'user/signin.html')
from django.shortcuts import render
# Create your views here.
def sign_up_view(request):
if request.method == 'GET': # 요청방식이 GET이면 화면을 보여준다.
return render(request, 'user/signup.html')
elif request.method == 'POST': # 포스트라면 DB에 저장한다.
return ''
def sign_in_view(request):
return render(request, 'user/signin.html')
{% extends 'base.html' %}
{% block title %}
회원가입
{% endblock %}
{% block content %}
<div class="container">
<div class="wrap">
<h2 class="title-center"> 회원가입 </h2>
# form. 화면의 데이터를 서버로 전송할 때 사용. 속성 method와 action(어느 url)추가
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %} # django 기능: 데이터 POST로 보낼 때 보안이 높아졌다.
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username"> # input 태그들 확인
</div>
<div class="form-group mt-2 mb-2">
<label for="password">비밀번호</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<div class="form-group mt-2 mb-2">
<label for="password2">비밀번호 확인</label>
<input type="password" class="form-control" id="password2" name="password2">
</div>
<div class="form-group mt-2 mb-2">
<label for="bio">나를 한마디로</label>
<input type="text" class="form-control" id="bio" name="bio">
</div>
<hr>
<div style="float: right">
<button type="submit" class="btn btn-primary">회원가입</button>
# submit 버튼: form 안에 있으면 해당 form을 실행시켜주는 역할, /sign-up/이라는 url로, POST 방식으로.
<a href="/sign-in" class="btn btn-secondary">로그인 페이지로</a>
</div>
</form>
</div>
</div>
{% endblock %}
이름, pw, pw2, bio
4가지 정보를 서버에 전달
(이 기능이 실제로 동작하는 곳은 user/views.py) >
서버는 해당 내용을 받아서 DB에 저장
UserModel
: 사용자 정보 저장하는 DB와 관련된 모델
from django.shortcuts import render, redirect
from .models import UserModel # .(dot): 동일 위치의 model에서
from django.http import HttpResponse
# Create your views here.
def sign_up_view(request): # sign_up_view가 실행될 때
if request.method == 'GET': # 요청방식이 Get이면 화면 보여주기 only
return render(request, 'user/signup.html')
elif request.method == 'POST': # POST면 4가지 정보를 request.POST에서 가져온다.
username = request.POST.get('username', None)
# request.POST: POST로 들어온 데이터를 이렇게 받는다. username이 없다면 빈 칸 처리하겠다.
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2: # pw == pw2 같아야 가입 가능
return render(request, 'user/signup.html') # 다르면 sign-up회원가입 다시 보여준다.
else: # pw가 일치한다면, 변수 지정 = 클래스()
new_user = UserModel()
new_user.username = username # 클래스
new_user.password = password
new_user.bio = bio
new_user.save() # 해야 위의 적은 정보들이 DB에 저장. (안 하면 함수에만 저장)
return redirect('/sign-in') # 회원가입이 성공했을 때만 로그인url로 redirect
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = UserModel.objects.get(username=username)
if me.password == password:
request.session['user'] = me.username
return HttpResponse("로그인 성공!")
else:
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')