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})