22. 09. 22.

hyo_dยท2022๋…„ 9์›” 22์ผ
0

์บ ํ”„ 17์ผ์ฐจ

1. ์ผ๊ณผ

๐Ÿ‘‰ ์žฅ๊ณ  ์ž…๋ฌธ ๊ฐ€์ด๋“œ(๊ฐ•๋ฏผ์ฒ  ํŠœํ„ฐ๋‹˜)

๐Ÿ‘‰ ํŒŒ์ด์ฌ ์žฅ๊ณ  ์‹ค๋ฌด ๊ธฐ์ดˆ(2-6~๋)

2. ์žฅ๊ณ  ์ž…๋ฌธ ๊ฐ€์ด๋“œ

1) ํ”„๋ ˆ์ž„์›Œํฌ

  • ์ธ์ฆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ, ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต, ๋ณด์•ˆ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ

  • ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ณ  ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด์ž

2) ์žฅ๊ณ ์™€ ํ”Œ๋ผ์Šคํฌ

  • ์žฅ๊ณ ๋Š” ๋ณต์žก(์ œ๊ณต ๊ธฐ๋Šฅ ๋งŽ์Œ, ์‚ฌ์šฉ๋ฒ• ๋ณต์žก) ์ž‘์ •ํ•˜๊ณ  ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

  • ํ”Œ๋ผ์Šคํฌ๋Š” ๋‹จ์ˆœ(์ œ๊ณต ๊ธฐ๋Šฅ ์ ์Œ, ์‚ฌ์šฉ๋ฒ• ๋‹จ์ˆœ) ๋น„๊ต์  ๋‹จ์ˆœํ•œ ์›น ์„œ๋ฒ„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

3) ์žฅ๊ณ 

  • ์ค‘์š”ํ•œ ๊ฒƒ์€ ํŒŒ์ผ ๊ฐ„์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”์ง€, ๊ทธ ๊ณผ์ •์—์„œ ๊ฐ ํŒŒ์ผ๋“ค์€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•„๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ค‘์š”ํ•œ ๊ณผ์ •

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ
โ€ข ๊ฐ์ฒด ๊ด€๋ฆฌ

- ์ธ์ฆ
โ€ข ํšŒ์› ๊ฐ€์ž…
โ€ข ํšŒ์› ํƒˆํ‡ด
โ€ข ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ
โ€ข ํšŒ์› ์ •๋ณด ์ˆ˜์ •

- ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ•˜๊ธฐ๊นŒ์ง€
โ€ข Request ๊ฐ€๊ณต
โ€ข Response ๊ฐ€๊ณต

3. ์žฅ๊ณ  ์‹ค๋ฌด ๊ธฐ์ดˆ(2-6~๋)

์ง€๋‚œ๋ฒˆ 2-5๊นŒ์ง€ ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๊ณ (22. 09. 20.) ์˜ค๋Š˜์€ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์™€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์™€ ๋กœ๊ทธ์ธ - ํ™”๋ฉด ๋„์šฐ๊ธฐ

1) ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ํ™”๋ฉด์„ ๋„์šฐ๊ธฐ ์œ„ํ•ด ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค(HTML ํŒŒ์ผ)

2) templatesํด๋” ์•„๋ž˜ ๋‹ค์Œ๊ณผ ๊ฐ™์ด base, signin, signup ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ดํ›„ ๊ฐ ํŒŒ์ผ์— ๊ฐ•์˜์—์„œ ์ œ๊ณต๋˜๋Š” ์ฝ”๋“œ์Šค๋‹ˆํŽซ์„ ๋ถ™์—ฌ๋„ฃ์—ˆ๋‹ค.

3) url - view - template๋ฅผ ์ด์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์žฅ๊ณ ์˜ MVT ํŒจํ„ด์„ ๋ณด๋ฉด์„œ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

  • M (Model) = models.py
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋ธ (ORM)
    • ์ €์žฅ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ
  • T (Template) = templatesํด๋” ๋‚ด์˜ html
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„
    • ํ™”๋ฉด
  • V (View) = views.py
    • ์‹ค์งˆ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜๋Š” ๋ถ€๋ถ„
    • url์„ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ทธ ์‚ฌ์ด์— ์ผ์–ด๋‚˜๋Š” '์„œ๋น„์Šค'๋“ค์ด ์กด์žฌํ•˜๋Š” ๊ณณ

4) template์€ ๋ชจ๋‘ ์ž‘์„ฑ ํ•œ ์ƒํƒœ๊ณ , view์™€ url์„ ์ž‘์„ฑ ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ url ์š”์ฒญ โ†’ ํฌ๋กฌ/์‚ฌํŒŒ๋ฆฌ ๋“ฑ์˜ ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ €
  • mySpartaSns์— ์š”์ฒญ์ด ์ ‘์ˆ˜ โ†’ settings.py๊ฐ€ ์žˆ๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ ์ž‘์„ฑํ•œ ์•ฑ์˜ urls.py
  • ๋“ฑ๋ก๋œ url์„ ์ฐพ๊ธฐ โ†’ urls.py์— ์—ฐ๊ฒฐ ๋œ ์•ฑ์— ์ƒ์„ฑ ํ•œ urls.py
  • ํ•ด๋‹น url์— ๋“ฑ๋ก ๋œ view๋ฅผ ์ฐพ๊ธฐ

์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์™€ ๋กœ๊ทธ์ธ - ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

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 ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ•ด์ค€๋‹ค.

4. ์žฅ๊ณ  ์‹ค๋ฌด ๊ธฐ์ดˆ ์ˆ™์ œ

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์ฃผ์ฐจ ๊ฐ•์˜๊นŒ์ง€ ๋“ฃ๊ณ  ์ฃผ๋ง์— ๋ณต์Šตํ•˜๋ฉด์„œ ๊ฐ์„ ๋” ์ตํ˜€์•ผ๊ฒ ๋‹ค.

profile
ํ–‡๋ณ‘์•„๋ฆฌ

0๊ฐœ์˜ ๋Œ“๊ธ€