๐Ÿ“’ [ TIL ] 2022.05.30_30์ผ์ฐจ # Django ๊ฐ•์˜ํ•™์Šต(3)

๋ฌธ๋ช…์ฃผยท2022๋…„ 5์›” 30์ผ
0
post-thumbnail

[ 2022-05-30 (์›”) ์˜ค๋Š˜์˜ TIL ]

[ Today Learn ]

  • render์™€ redirect์˜ ์ฐจ์ด
  • Django์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์—ฌ๋ถ€ ํ™•์ธ๋ฐฉ๋ฒ•

โœ๏ธ ๋‚ด๊ฐ€ ๋ฐฐ์šด๊ฒƒ, ์–ป์€๊ฒƒ

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

โ“ render ๋ž€ ?
render๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ๊ฐ€์ง€๋ฉฐ, ์ด ์ค‘ request์™€ template_name ์€ ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค.
template_name ์€ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์€ ํ…œํ”Œ๋ฆฟ, ์ฆ‰ htmlํŒŒ์ผ์„ ๋„์šด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

render(request, template_name, context=None, content_type=None, status=None, using=None)

๐Ÿงฉ ์ ์šฉ์˜ˆ์‹œ

#views.py

from django.shortcuts import render

def my_view(request):
    name = "minsung"
    return render(request, 'myapp/index.html', {
        'name': name,
    }

โ“ redirect ๋ž€ ?
redirect๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ๊ฐ€์ง€๋ฉฐ to์—๋Š” ์–ด๋Š URL๋กœ ์ด๋™ํ• ์ง€๋ฅผ ์ •ํ•œ๋‹ค. ์ด๋•Œ ์ƒ๋Œ€ URL, ์ ˆ๋Œ€ URL ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹จ์ง€ URL์„ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— render์ฒ˜๋Ÿผ context๊ฐ’์„ ๋„˜๊ธฐ์ง€๋Š” ๋ชปํ•œ๋‹ค.

redirect(to, permanent=False, *args, **kwargs)

๐Ÿงฉ ์ ์šฉ์˜ˆ์‹œ

#views.py

from django.shortcuts import redirect

def my_view(request):
    ...
    return redirect('view-name')             # view_name ์‚ฌ์šฉ
    # return redirect('/some/url/')                  # ์ƒ๋Œ€ ๊ฒฝ๋กœ 
      # return redirect('https://example.com/')# ์ ˆ๋Œ€ ๊ฒฝ๋กœ 

๋‘ ํ•จ์ˆ˜๋ฅผ ํ—ท๊ฐˆ๋ ค ํ˜ผ๋™ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ํŠนํžˆ ์žฅ๊ณ ๊ฐ€ ์ต์ˆ™ํ•˜์ง€์•Š์•„์„œ ๋‘˜๋‹ค return ๋’ค์— ์œ„์น˜ํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•  ์‹œ ์‚ฌ์šฉ๋˜๊ธฐ๋•Œ๋ฌธ์— ๋” ํ—ท๊ฐˆ๋ ธ๋‹ค. render๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ , redirect๋Š” URL๋กœ ์ด๋™ํ•œ๋‹ค. URL ๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ๊ฑด ๊ทธ URL ์— ๋งž๋Š” views ๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋ ํ…Œ๊ณ  ์—ฌ๊ธฐ์„œ render ๋ฅผ ํ• ์ง€ ๋‹ค์‹œ redirect ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ฒŒ๋œ๋‹ค. ์ด ์ ์— ์œ ์˜ํ•˜์—ฌ ์•ž์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค.

* Django์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์—ฌ๋ถ€ ํ™•์ธ๋ฐฉ๋ฒ•

Django์—์„œ ๊ฐ ๋ทฐ์— ์ ‘๊ทผ ์‹œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘๊ทผ์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

< Decorator๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• >
ํ•จ์ˆ˜ํ˜•๋ทฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„ํŽธํ•˜๊ฒŒ @login_required๋ฅผ ์จ์ฃผ๋Š” ๊ฒƒ ๋งŒ์œผ๋กœ๋„ ๋ชจ๋“  ์ž‘์—…์ด ๋๋‚œ๋‹ค.

๐Ÿงฉ ์ ์šฉ์˜ˆ์‹œ

from django.contrib.auth.decorators import login_required
 
@login_required
def my_view(request):    

๐ŸŒฑ ๋Š๋‚€ ์ 

์˜ค๋Š˜์€ 4์ฃผ์ฐจ๊นŒ์ง€ ๋“ค์—ˆ๋˜ ๊ฐ•์˜๋ฅผ ํ•œ๋ฒˆ ๋” ๋ณต์Šตํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ์ฒ˜์Œ๋ณด๋Š” python์–ธ์–ด๋“ค์ด ๋งŽ๋‹ค๋ณด๋‹ˆ ์ต์ˆ™์น˜์•Š์•„์„œ ์ดํ•ดํ•˜๋Š”๋ฐ์— ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๋‹ค. ์ฒ˜์Œ์—๋Š” render์™€ redirect์˜ ์ฐจ์ด๋ฅผ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์—†์–ด์„œ ์–ด๋Š๋•Œ์— ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์จ์•ผํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, ๊ตฌ๊ธ€๋ง์œผ๋กœ ์ฐพ์•„๋ณด๊ณ  ๋‚ด ์ฝ”๋“œ์™€ ๋น„๊ตํ•˜๋ฉฐ ๊ณต๋ถ€ํ•˜๋‹ˆ ์ดํ•ดํ•˜๊ธฐ ํ›จ์”ฌ ์ˆ˜์›”ํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ ํ•œ ๋ฒˆ๋” ๋ณต์Šตํ•˜๋‹ˆ๊นŒ ๋” ์„ ๋ช…ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.๐Ÿ˜

๐ŸŽ ์ž์„ธํ•œ ์ฝ”๋“œ๋Š” Moonmoo ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค

profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ ๊พธ์ค€ํžˆ ๋‚˜์•„๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๐Ÿ™†โ€โ™€๏ธ https://github.com/Moonmooj

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

comment-user-thumbnail
2022๋…„ 5์›” 30์ผ

๋ณต์Šต๊นŒ์ง€ ์—ด์‹ฌํžˆ ํ•˜์‹œ๋Š” ๋ชจ์Šต ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค~

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2022๋…„ 5์›” 31์ผ

ํ—‰ ๋„ˆ๋ฌด์ž˜ํ–ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด