Decorator
๐ก Decorator
Django๋ก ์ฌ์ฉ ํ๋ค๊ฐ ๋ณด๋ฉด ๋ก๊ทธ์ธ ๊ตฌํ์์ @login_required์ ๊ฐ์ด
์ฅ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค.
์ค๋์ Decorator(์ฅ์์)์ ๋ํด์ ์ ๋๋ก ์์๋ด์ผ๊ฒ ๋ค.
๐ ์์ธํ ์์๋ณด๊ธฐ
Decorator๋ ๋์ ํจ์๋ฅผ Wrappingํ๊ณ , Wrapping๋ ํจ์์ ์ ๋ค์ ์ถ๊ฐ์ ์ผ๋ก
๊พธ๋ฉฐ์ง ๊ตฌ๋ฌธ๋ค์ ์ ์ํด์ ์์ฝ๊ฒ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค.
Decorator๋ ๊ฐ์ธ๊ณ ์๋ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ ์ด๋ ํ์ ์ถ๊ฐ๋ก ์ฝ๋๋ฅผ ์คํํ๋
๊ธฐ๋ฅ์ ๊ฐ์ท๋ค๊ณ ํ๋ค. ์ด ๊ธฐ๋ฅ์ผ๋ก ์ ๋ ฅ ์ธ์์ ๋ฐํ ๊ฐ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ์ ์๋ค.
Decorator๋ ๋ฉ์ธ ๊ตฌ๋ฌธ์ด ์๊ณ , ์ฌ๊ธฐ์ ๋ถ๊ฐ์ ์ธ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๊ณ ์ถ์ ๋,
๊ทธ๋ฆฌ๊ณ ๋ถ๊ฐ์ ์ธ ๊ตฌ๋ฌธ์ ๋ฐ๋ณตํด์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
์ด ๋ ๋ถ๊ฐ์ ์ธ ์์ ์ Decorator๋ก ์ ์ธํด์ ์์ ๋กญ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ตญ view.py์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ์ ์ํ ๋ @login_required๋ฅผ ์ฐ๋ ์ด์ ๋
๋๊ฐ์ ๋ฐ๋ณต์ ์ค์ฌ์ ๋ณด๋ค ๊น๋ํ ์ฝ๋๋ฅผ ์ฐ๊ธฐ ์ํจ์ด์๋ค๊ณ ์๊ฐ๋๋ค.
# ํ๋กํ ์์ logic
@login_required
def profile_edit(request):
if request.method == "POST":
# ๊ธฐ์กด์ ์ ์ฅ๋์ด ์๋ ํ๋กํ ๊ฐ์ ธ์ค๊ธฐ.
form = ProfileForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
messages.success(request,"ํ๋กํ์ ์์ ํ์ต๋๋ค.")
return redirect("root")
else:
form = ProfileForm(instance=request.user)
return render(request,'accounts/profile_edit_form.html',{'form':form})