๐Ÿš€ Django ๊ณต๋ถ€ 3์ผ์ฐจ

๊น€ํƒœ์ธยท2022๋…„ 5์›” 30์ผ
0

Django

๋ชฉ๋ก ๋ณด๊ธฐ
3/10
post-thumbnail

3์ฃผ์ฐจ ๋ฐฐ์šธ ๋‚ด์šฉ

a. Django์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์‚ฌ์šฉ
b. Django์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋ธ ํ™•์žฅ
c. ํฌ์ŠคํŠธ ์ฝ๊ธฐ/์“ฐ๊ธฐ/์‚ญ์ œ ํ•˜๊ธฐ

Django์˜ ์‚ฌ์šฉ์ž ๋ชจ๋ธ ๋น„๊ตํ•˜๊ธฐ (๋‚ด๊ฐ€ ๋งŒ๋“ ๊ฒƒ vs ์žฅ๊ณ )

Django์—์„œ ์ œ๊ณตํ•˜๋Š” auth_user๊ฐ€
๋‚ด๊ฐ€ ๋งŒ๋“  my_user๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

์ด๋ ‡๊ฒŒ ๊ฐ„ํŽธํžˆ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆ ์งฑ์งฑ๋งจ...!

User๋ชจ๋ธ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๊ธฐ

  • ์ƒ์†
class A:
	def ๊ธฐ๋Šฅ_A_1:
		return '๊ธฐ๋Šฅ_A_1'
	def ๊ธฐ๋Šฅ_A_2:
		return '๊ธฐ๋Šฅ_A_2'

class B(A):
	def ๊ธฐ๋Šฅ_B_1:
		return '๊ธฐ๋Šฅ_B_1'

์œ„์™€๊ฐ™์ด Class B(A)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
ํด๋ž˜์ŠคA์—์„œ ์„ ์–ธํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š”
์ƒ์† ์ƒํƒœ๊ฐ€ ๋จ


  • AbstractUser ์žฅ๊ณ ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์œ ์ € ๋ชจ๋ธ

    ํด๋ž˜์Šค์— UserModel์— (AbstractUser) ์ƒ์†

  • ๊ธฐ๋ณธ ์œ ์ € ๋ชจ๋ธ์— ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ์ž ๋ชจ๋ธ์„ ์ถ”๊ฐ€ ํ• ๋•
    settings.py ์—์„œ ๋ชจ๋ธ ๋ณ€๊ฒฝ์„ ์„ ์–ธ ํ•ด์ค˜์•ผํ•จ

    ex) AUTH_USER_MODEL = 'user.UserModel'

User ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ์‹œํ‚ค๊ธฐ

python manage.py makemigrations ->์žฅ๊ณ ์— ์ˆ˜์ • ์•Œ๋ฆฌ๊ธฐ
python manage.py migrate -> ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ

Django ์‚ฌ์šฉ์ž ๋ชจ๋ธ ์ ์šฉํ•˜๊ธฐ

# user/views.py

from django.contrib.auth import get_user_model #์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜
# user/views.py

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 = get_user_model().objects.filter(username=username)
            if exist_user:
								return render(request, 'user/signup.html') # ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋„์›€
            else:
                UserModel.objects.create_user(username=username, password=password, bio=bio)
                return redirect('/sign-in') # ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

๋กœ๊ทธ์ธ ์ˆ˜์ •ํ•˜๊ธฐ

# user/views.py
from django.contrib import auth # ์‚ฌ์šฉ์ž auth ๊ธฐ๋Šฅ

auth.authenticate
์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ˜„์žฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ ํ•˜๋Š”์ง€, ์‚ฌ์šฉ์ž์™€ ๋งž๋Š”์ง€๊นŒ์ง€ ํ•œ๋ฒˆ์— ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜

is not None : ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด~

def sign_in_view(request):
    if request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        me = auth.authenticate(request, username=username, password=password)
        if me is not None:
            auth.login(request, me)
            return HttpResponse(me.username)
        else:
            return redirect('/sign-in')

    elif request.method == 'GET':
        return render(request, 'user/signin.html')

{{}} ์™€ {% %} ์€ ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฐ€?

{{ }} ์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์€ ๋‹จ์ˆœ ๋ณ€์ˆ˜ ์ถœ๋ ฅ์„ ์œ„ํ•ด์„œ ์“ฐ๋Š” ํƒœ๊ทธ์ด๊ณ ,
{% %} ์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์€ if, for ๋“ฑ ์ž„์˜์˜ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ด๋Š” ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.

render ์™€ redirect์˜ ์ฐจ์ด

render๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ 
redirect๋Š” URL๋กœ ์ด๋™ํ•จ

URL๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ URL์— ํ•ด๋‹นํ•˜๋Š” views๊ฐ€ ์‹คํ–‰๋˜๋Š”๊ฒƒ

order_by

๊ฒŒ์‹œ๊ธ€์ด ์ƒ์„ฑ ๋œ ์‹œ๊ฐ„์„ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•ด์คŒ (๊ฒŒ์ œ ์ˆœ์œผ๋กœ๊ฐ€ ์•„๋‹Œ ์ตœ์‹  ์ˆœ์œผ๋กœ)

all_tweet = TweetModel.objects.all().order_by('-created_at')

-์จ์•ผ ์—ญ์ˆœ์ •๋ ฌ๋จ
profile
์ฝ”๋”ฉ์ด ์ทจ๋ฏธ๊ฐ€ ๋˜๋Š” ๊ทธ๋‚ ๊นŒ์ง€

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