๐ ์ฅ๊ณ ์ ๋ฌธ ๊ฐ์ด๋(๊ฐ๋ฏผ์ฒ ํํฐ๋)
๐ ํ์ด์ฌ ์ฅ๊ณ ์ค๋ฌด ๊ธฐ์ด(2-6~๋)
1) ํ๋ ์์ํฌ
์ธ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ, ์์ฒญ์ ๋ํ ์๋ต, ๋ณด์, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ
์ฌ์ฉ๋ฒ์ ์ตํ๊ณ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ค์ฌ๋ค๋ณด์
2) ์ฅ๊ณ ์ ํ๋ผ์คํฌ
์ฅ๊ณ ๋ ๋ณต์ก(์ ๊ณต ๊ธฐ๋ฅ ๋ง์, ์ฌ์ฉ๋ฒ ๋ณต์ก) ์์ ํ๊ณ ์น ์๋น์ค๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ
ํ๋ผ์คํฌ๋ ๋จ์(์ ๊ณต ๊ธฐ๋ฅ ์ ์, ์ฌ์ฉ๋ฒ ๋จ์) ๋น๊ต์ ๋จ์ํ ์น ์๋ฒ ๊ฐ๋จํ๊ฒ ๋ง๋ค ๋ ์ฌ์ฉ
3) ์ฅ๊ณ
์ค์ํ ๊ฒ์ ํ์ผ ๊ฐ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋์ง, ๊ทธ ๊ณผ์ ์์ ๊ฐ ํ์ผ๋ค์ ์ด๋ค ์ญํ ์ ํ๋์ง ์๋ ๊ฒ์ด๋ค.
์ค์ํ ๊ณผ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ
โข ๊ฐ์ฒด ๊ด๋ฆฌ
- ์ธ์ฆ
โข ํ์ ๊ฐ์
โข ํ์ ํํด
โข ๋ก๊ทธ์ธ/๋ก๊ทธ์์
โข ํ์ ์ ๋ณด ์์
- ์์ฒญ์ ๋ํ ์๋ต์ ํ๊ธฐ๊น์ง
โข Request ๊ฐ๊ณต
โข Response ๊ฐ๊ณต
์ง๋๋ฒ 2-5๊น์ง ๊ฐ์๋ฅผ ๋ค์๊ณ (22. 09. 20.) ์ค๋์ ์ฌ์ฉ์ ๊ด๋ฆฌ์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ํด ๊ณต๋ถํ๋ค.
1) ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ํ๋ฉด์ ๋์ฐ๊ธฐ ์ํด ํ ํ๋ฆฟ์ ๋ง๋ค์ด์ผ ํ๋ค(HTML ํ์ผ)
2) templatesํด๋ ์๋ ๋ค์๊ณผ ๊ฐ์ด base, signin, signup ํ์ผ์ ์์ฑํ๋ค. ์ดํ ๊ฐ ํ์ผ์ ๊ฐ์์์ ์ ๊ณต๋๋ ์ฝ๋์ค๋ํซ์ ๋ถ์ฌ๋ฃ์๋ค.
3) url - view - template๋ฅผ ์ด์ด์ฃผ๊ธฐ ์ํด ์ฅ๊ณ ์ MVT ํจํด์ ๋ณด๋ฉด์ ํ๋ฆ์ ํ์
ํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
4) template์ ๋ชจ๋ ์์ฑ ํ ์ํ๊ณ , view์ url์ ์์ฑ ํด ์ฃผ์ด์ผ ํ๋ค.
1) ํ์๊ฐ์ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ url์ 'sign-up'์ด๊ณ , 'GET'์ด๋ผ๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค. ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ก ํ๋ url์ ๋์ผํ๊ฒ 'sign-up'์ผ๋ก ํ ๊ฒ์ด์ง๋ง 'POST'๋ผ๋ ๋ฐฉ์์ผ๋ก ๋ณด๋ธ๋ค.
๐ GET์ ๋๋ถ๋ถ '๊ฐ์ ์ฝ์ด ์ฌ ๋' ์ฌ์ฉํ๊ณ , POST๋ ๊ฐ์ ์ฃผ๊ณ ๋ ์์ , ์ญ์ ๋ฅผ ์์ฒญ ํ ๋ ์ฌ์ฉํ๋ค.
2) user์ views.py sign_up_view์ POST ์ถ๊ฐ
3) HTML์์ formํ๊ทธ ์ค์
4) user์ views.py์์ ์ ์ก๋๋ ๋ฐ์ดํฐ ๋ฐ์์ ์ ์ฅ
1) ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์์ '์์ฒญ'๊ณผ '์๋ต'์ ํ๋ค. ๊ทธ ๋ ๊ฐ์ ์ฌ๋์ด ์์ฒญ์ ํ๋์ง ํ์ธ์ ํ ์ ์๋๋ก ๋์์ฃผ๋ '์ธ์ '์ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์.
๐ '์ธ์ '์ '์ฌ์ฉ์์ ์ ๋ณด'๋ฅผ ์ ์ฅ ํ ์ ์๋ค!
2) user์ฑ์ views.py ์ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌ ํด ์ค ํจ์๋ฅผ ๋ง๋ค๊ณ , url๊ณผ ์ด์ด์ฃผ๊ธฐ ์ํด views.py์ sign_in_view์ POST๋ฅผ ์ถ๊ฐํ๋ค.
3) ๋ฐฉ๊ธ๊น์ง ์์ฑํ url๊ณผ view๋ก html์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ธฐ ์ํด์ signin.html์ formํ๊ทธ
์ action๊ณผ method๋ฅผ ์ถ๊ฐํ๋ค. ํ์๊ฐ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, input์ ์ด๋ฆ์ ๊ธฐ์ตํด๋์ (username, password)formํ๊ทธ
๋ ์ด ๋๊ฐ๋ฅผ sign-in url๋ก ๋ณด๋ด์ค๋ค.
4) username๊ณผ password๋ฅผ ๊ฒ์ฌ ํ๊ธฐ ์ํด์๋ '์ฌ์ฉ์'๋ฅผ ๋ถ๋ฌ์์ผํ๋ค. user์ฑ์ views.py์ ์๋ sign_in_view ํจ์๋ฅผ ์ถ๊ฐ ํด์ค๋ค.
user/views.py๋ฅผ ์์
1) ์ง๊ธ ํ์๊ฐ์
์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ผํ ์ฌ์ฉ์๊ฐ ์์ด๋ ๊ฐ์
์ด ๋๋๋ฐ ์ฌ์ฉ์๋ ์ ์ผํ๊ฒ ๋ง๋ค์ด์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์๊ฐ์
์์ ์ด๋ฏธ ์๋ ์ฌ์ฉ์ ์ธ์ง ํ์ธํ๋ ์ฝ๋๋ฅผ ์์ฑ
from django.shortcuts import render, redirect
from .models import UserModel
from django.http import HttpResponse
# 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)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
exist_user = UserModel.objects.filter(username=username)
if exist_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')
2) ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ํ์ HttpResponse๋ฅผ ์ฌ์ฉํด์ ํ๋ฉด์ '์ฌ์ฉ์ ์ด๋ฆ'์ ์ถ๋ ฅ
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(me.username)
else:
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')
โญ ์๋ก์ด ํ๊ณผ ์๋ก์ด ์ปค๋ฆฌํ๋ผ์ด ๋์์ ์์๋๋ฉด์ ์์นจ์ ๋ง์ด ์ ์ ์ด ์์๋ค. ์ฅ๊ณ ๊ฐ์ด๋ ๊ฐ์์์ ํํฐ๋์ด ๋ง์ํ์ ๋๋ก ์ฅ๊ณ ๋ ๊ธฐ๊ณ์ด๊ธฐ ๋๋ฌธ์ ์์ ํ ์๊ณ ๋์ด๊ฐ๋ ค๊ณ ํ๊ธฐ๋ณด๋ค๋ ๋น์ฅ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ฌ์ฉ๋ฒ์ ์ต์ํด์ง๋๊ฒ์ ์ค์ ์ ๋๊ณ ๊ณต๋ถํ๊ณ ์๋ค. ์์ง ์๋ฏ๋ง๋ฏํ์ง๋ง ๋ด์ผ 3์ฃผ์ฐจ ๊ฐ์๊น์ง ๋ฃ๊ณ ์ฃผ๋ง์ ๋ณต์ตํ๋ฉด์ ๊ฐ์ ๋ ์ตํ์ผ๊ฒ ๋ค.