โ 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์์ ๊ฐ ๋ทฐ์ ์ ๊ทผ ์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ์ฌ ์๋์ ๊ฐ์ด ์ ๊ทผ์ ํต์ ํ ์ ์๋ค.
< Decorator๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ >
ํจ์ํ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ฐํธํ๊ฒ @login_required๋ฅผ ์จ์ฃผ๋ ๊ฒ ๋ง์ผ๋ก๋ ๋ชจ๋ ์์
์ด ๋๋๋ค.
๐งฉ ์ ์ฉ์์
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
์ค๋์ 4์ฃผ์ฐจ๊น์ง ๋ค์๋ ๊ฐ์๋ฅผ ํ๋ฒ ๋ ๋ณต์ตํ๋ ์๊ฐ์ ๊ฐ์ก๋ค. ์ฒ์๋ณด๋ python์ธ์ด๋ค์ด ๋ง๋ค๋ณด๋ ์ต์์น์์์ ์ดํดํ๋๋ฐ์ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ค. ์ฒ์์๋ render์ redirect์ ์ฐจ์ด๋ฅผ ํ์คํ ์ ์ ์์ด์ ์ด๋๋์ ์ด๋ค ํจ์๋ฅผ ์จ์ผํ๋์ง ํท๊ฐ๋ ธ๋๋ฐ, ๊ตฌ๊ธ๋ง์ผ๋ก ์ฐพ์๋ณด๊ณ ๋ด ์ฝ๋์ ๋น๊ตํ๋ฉฐ ๊ณต๋ถํ๋ ์ดํดํ๊ธฐ ํจ์ฌ ์์ํ๋ค. ๊ทธ๋๋ ํ ๋ฒ๋ ๋ณต์ตํ๋๊น ๋ ์ ๋ช ํ๊ฒ ์ฝ๋๋ฅผ ์ดํดํ ์ ์์๋ค.๐
๐ ์์ธํ ์ฝ๋๋ Moonmoo ์ ๊ฒ์ํ์ต๋๋ค
๋ณต์ต๊น์ง ์ด์ฌํ ํ์๋ ๋ชจ์ต ์์ฃผ ์ข์ต๋๋ค~