django 06 사용자입력 저장하기

Grace Goh·2022년 9월 28일
0

Django

목록 보기
7/32

회원가입을 통해 사용자입력 저장하기.
/sign-up으로 접속하면 회원가입 화면을 보여준다.
POST 방식으로

데이터 통신

  • GET 데이터를 저장, 수정할 때.
  • POST 데이터 전달해주는 과정.

모든 과정이 사용자와 관련이 있다 > user 앱에서 진행.
user의 views.py를 수정한다.

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')

views.py 수정1

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')

### templates/user/signup.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에 저장

views.py 수정2 : POST 작업

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')

#### 정리 * URL, view, DB까지 어떻게 한 번에 이동하는지. * GET, POST
profile
Español, Inglés, Coreano y Python

0개의 댓글