2019/12/28 - [์ฅ๊ณ (django)] - (django) ์ฅ๊ณ - ํ์๊ฐ์
๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (MVC)
ํ์๊ฐ์
๊ธฐ๋ฅ๊น์ง ๋ง์ณค๋ค๋ ๊ฐ์ ํ์ ์์ํฉ๋๋ค.
1. view์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ํจ์ ์์ฑํ๊ธฐ (์ดํ ์ฝ๋๋ ์ ๋ถ views.py)
*user(์ฑ) - views.py ์ํฌํธ ๋ถ๋ถ
from django.shortcuts import render, redirect
from .models import Myuser
from django.http import HttpResponse
from django.contrib.auth.hashers import make_password, check_password #๋น๋ฐ๋ฒํธ ์ํธํ / ํจ์ค์๋ ์ฒดํฌ(db์์๋๊ฑฐ์ ์ผ์น์ฑํ์ธ)
HttpResponse : ์๋ต์ ๋ํ ๋ฉํ์ ๋ณด๋ฅผ ํฌํจํ ๊ฐ์ฒด์
๋๋ค. ๋ก๊ทธ์ธ ์๋ฃ์์ "๋ก๊ทธ์ธ ์๋ฃ" ๋ผ๋ text๋ฅผ ๋์ฐ๊ธฐ ์ํด ์ํฌํธํ์ต๋๋ค.
make_password(str) : ์ด ํจ์์ ๋ฃ์ด์ค ๋ฌธ์์ด์ ์ํธํํฉ๋๋ค. (hashing)
check_password(a,b) : a,b๊ฐ ์ผ์นํ๋์ง ํ์ธ, ๋ฐํํฉ๋๋ค.
*user(์ฑ) - views.py ๋ก๊ทธ์ธ ํจ์
def login(request):
response_data = {}
if request.method == "GET" :
return render(request, 'login.html')
elif request.method == "POST":
login_username = request.POST.get('username', None)
login_password = request.POST.get('password', None)
if not (login_username and login_password):
response_data['error']="์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ชจ๋ ์
๋ ฅํด์ฃผ์ธ์."
else :
myuser = Myuser.objects.get(username=login_username)
#db์์ ๊บผ๋ด๋ ๋ช
๋ น. Post๋ก ๋ฐ์์จ username์ผ๋ก , db์ username์ ๊บผ๋ด์จ๋ค.
if check_password(login_password, myuser.password):
request.session['user'] = myuser.id
#์ธ์
๋ ๋์
๋๋ฆฌ ๋ณ์ ์ฌ์ฉ๊ณผ ๋๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
#์ธ์
user๋ผ๋ key์ ๋ฐฉ๊ธ ๋ก๊ทธ์ธํ id๋ฅผ ์ ์ฅํ๊ฒ.
return redirect('/')
else:
response_data['error'] = "๋น๋ฐ๋ฒํธ๋ฅผ ํ๋ ธ์ต๋๋ค."
return render(request, 'login.html',response_data)
request.POST.get('username', None) : POST๋ก ๋ค์ด์จ ๋ฐ์ดํฐ์์ username์ด๋ผ๋ key๋ก ๊ฐ์ ์ป์ต๋๋ค. ์๋ค๋ฉด None์ ๋ฐํํฉ๋๋ค.
Myuser.objects.get(username=login_username) : POST๋ก ๋ค์ด์จ login_username์ผ๋ก Myuserํด๋์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ต๋๋ค. (username, password, email)
request.session['user'] = myuser.id : ์ธ์
(session)์ id๊ฐ์ ๋ฃ์ต๋๋ค. ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํจ์
๋๋ค.
๋ก๊ทธ์์, home ํจ์
def home(request):
user_id = request.session.get('user')
if user_id :
myuser_info = Myuser.objects.get(pk=user_id) #pk : primary key
return HttpResponse(myuser_info.username) # ๋ก๊ทธ์ธ์ ํ๋ค๋ฉด, username ์ถ๋ ฅ
return HttpResponse('๋ก๊ทธ์ธ์ ํด์ฃผ์ธ์.') #session์ user๊ฐ ์๋ค๋ฉด, (๋ก๊ทธ์ธ์ ์ํ๋ค๋ฉด)
def logout(request):
request.session.pop('user')
return redirect('/')
myuser_info = Myuser.objects.get(pk=user_id) : ์ธ์
์ ๋ฃ์ด๋จ๋ id ๊ฐ์ pk๋ก ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ต๋๋ค.
( pk : primary key)
๋ก๊ทธ์์์ ์ธ์
์ ์๋ 'user'์ ๊ฐ์ ์ ๊ฑฐํ๋ฉด(pop ๋๋ del) ๋ฉ๋๋ค.
2. ํ์ด์ง(html) ์์ฑ
<div class = "raw">
<div class = "col-12" >
<div class = "col-12 text-center">
<h1>๋ก๊ทธ์ธ</h1>
<br><br>
</div>
<form method = "POST">
{% csrf_token %}
<div class="form-group">
<label for="username">์ฌ์ฉ์ ์ด๋ฆ</label>
<input type="text"
class="form-control"
name = "username"
id="username"
placeholder="์ด๋ฆ์ ์
๋ ฅํ์ธ์">
</div>
<div class="form-group">
<label for="password">๋น๋ฐ๋ฒํธ</label>
<input type="password"
name = "password"
class="form-control" id="password" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ธ์">
</div>
<span style="color:red;"><strong>{{ error }}</strong> </span>
<button type="submit" class="btn btn-primary">๋ก๊ทธ์ธ</button>
</form>
ํ์๊ฐ์
ํ์ด์ง์์ form ๋ช์นธ๋ง ์ญ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
3. URL์ฐ๋
*ํ๋ก์ ํธ ํด๋ - url.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from myuser.views import home
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('myuser.urls')), #ํด๋.ํ์ผ๋ช
#์ฆ, user/ ์ดํ url๋ค์ myuserํด๋์ urls์์ ๊ด๋ฆฌํ๋๋กํ๋ค.๋ผ๋ ์ค์
path('', home),
]
๋ก๊ทธ์ธ์ด ๋๋ฉด, homeํ๋ฉด์ผ๋ก ์ด๋ํ๋๋ก ๋ง๋ค๊ธฐ ์ํด home์ ํ๋ ์ถ๊ฐํด์ค๋๋ค.
user(์ฑ) - url.py
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register ),
path('login/', views.login ),
path('logout/', views.logout ),
]
login , logout url์ ๋ง๋ค์ด์ฃผ๊ณ , views์ ๋ง๋ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ํจ์์ ์ฐ๊ฒฐํด ์ค๋๋ค.