1. 페이지 만들기
우선 파일 구성을 한다.

그리고 만드는데 Django가 재밌는건 다른 html파일을 연장 시킬수 있다.
{% extends 'base.html' %}
해당 코드를 적용시키면 base.html을 sigin, signup에 적용시킬 수 있다. 물론 파일마다 적용해야 한다.
우선 user app 내부에서 user/views.py, user/urls.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')
#urls.py
from django.contrib import admin
from django.urls import path
from . import views
#name은 url에 /뒤에 들어가는 내용이다.
#ex) http://127.0.0.1:8000/sign-up/
urlpatterns = [
path('admin/', admin.site.urls),
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
]
이제 user와 project의 url을 연결해줘야한다.
project/urls.py에 들어가서
from django.urls import include
를 추가해준다. 이는 다른 app의 url을 추가해주는 기능인데
urlpatterns = [
path('', include('user.urls')),
]
상단과 같이 적용을 하면 user에 urls.py 파일과 project의 urls.py을 연결시킬 수 있다.
2. 회원가입 기능 구현
회원가입이니 당연히 user app에서 진행된다.
우선 user/view.py에서
from django.shortcuts import render
# Create your views here.
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
#데이터베이스 저장 기능
return ''
def sign_in_view(request):
return render(request, 'user/signin.html')
GET일때는 화면을 보여주고 POST일때는 데이터베이스에 변화를 주는 코드를 작성한다.
이후 signup.html로 가서 코드를 추가해준다.
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %}
- method는 말그대로 어떤 방식을 사용하는지이다.
- action은 주소를 의미한다. 뒤에 무조건 / 를 붙여줘야한다.
- {% csrf_token %}는 Django에서 기본적으로 제공하는 보안 기능이다.
- action과 method의 순서는 상관 없다.
html을 보면
{% extends 'base.html' %}
{% block title %}
회원가입
{% endblock %}
{% block content %}
<div class="container">
<div class="wrap">
<h2 class="title-center"> 회원가입 </h2>
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
</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>
<a href="/sign-in" class="btn btn-secondary">로그인 페이지로</a>
</div>
</form>
</div>
</div>
{% endblock %}
이와 같이 구성되는데 button type="submit"은 form안에 있을때 input 값들을 전송해준다. 이때 input의 name값으로 전송이된다. 이를 잘 기억해야 연결할 수 있다.
이제 user/views.py에 데이터 받는 과정을 추가한다.
from django.shortcuts import render, redirect #redirect는 name 즉, url로 이동해주는 방법이다.
from .models import UserModel #UserModel을 불러와 받은 데이터를 저장해준다.
# Create your views here.
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None) #''안에 name값이 들어간다.
password = request.POST.get('password', None) #None은 아무것도 안받았을시
password2 = request.POST.get('password2', None) #None으로 두는것을 의미한다.
bio = request.POST.get('bio', None)
if password != password2: #비밀번호가 틀리면
return render(request, 'user/signup.html')
else:
old_user = UserModel.objects.filter(username=username) #기존 유저를 가져와서
if old_user: #있다면
return render(request, 'user/signup.html')
else: #없다면
new_user = UserModel()
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
return redirect('/sign-in')
이제 회원가입을 하고 db에 가서 보면

짜잔! 들어가져 있는걸 확인할 수 있다.
3. 로그인 기능 구현
우선 세션을 사용할 것인데 세션은 사용자의 정보를 저장하는 공간이다.(음.... 근데 분명 jwt를 활용하는게 더 좋은것으로 알고 있다만....)
signup과 같은 작업을 해준다.
<form class="form-area" method="post" action="/sign-in/">
{% csrf_token %}
이제 user/views.py에서 데이터를 받는 작업을 한다.
from django.shortcuts import render, redirect
from .models import UserModel
from django.http import HttpResponse
# Create your views here.
def sign_up_view(request):
''''''
return redirect('/sign-in')
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None) #마찬가지로 name값을 받고
password = request.POST.get('password', None)
me = UserModel.objects.get(username=username) #UserModel에서 객체를 받아오는데
if me.password == password: #비밀번호가 같다면
request.session['user'] = me.username #user세션 안에 데이터를 넣어주고
return HttpResponse(f'{me.username} 로그인에 성공하셨습니다!')
else: #다르다면
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')
이제 로그인을 해보면

완료되었다.
'Django > Django Vanila' 카테고리의 다른 글
| 7. Django 로그인 이후 기능 (0) | 2022.05.27 |
|---|---|
| 6. Django에서 제공하는 사용자 기능 (0) | 2022.05.27 |
| α. 기타 Django 상황들(VsCode, 오류 등) (0) | 2022.05.26 |
| 4. Django admin (0) | 2022.05.26 |
| 3. Django ORM & Database (0) | 2022.05.26 |