☘️ Authentication 인증시스템 구축 & Decorator를 이용한 코드 간소화
views.py
파일에서 AccountUpdateView
와 AccountDeleteView
클래스의 context_object_name
을 'target_user'로 설정합니다.
delete.html
과 update.html
템플릿 파일에서 user.pk
를 target_user.pk
로 변경합니다.
urls.py
파일에서 'account/'를 'accounts/'로 변경합니다.
login_required
데코레이터를 사용하여 hello_world
함수에 인증 요구사항을 추가합니다.
AccountCreateView
클래스에 login_required
데코레이터를 사용하여 인증 요구사항을 추가합니다.
AccountDetailView
, AccountUpdateView
, AccountDeleteView
클래스에 has_ownership
데코레이터를 사용하여 인증 및 소유권 요구사항을 추가합니다.
account_ownership_required
데코레이터를 정의하고, 해당 데코레이터를 has_ownership
리스트에 추가합니다.
has_ownership
리스트를 @method_decorator
의 첫 번째 인자로 전달하여 순차적으로 실행되도록 설정합니다.
© View
has_ownership = [account_ownership_required, login_required]
@login_required()
def hello_world(request):
if request.method == "POST":
tmp = request.POST.get('hello_world_input')
world = HelloWorld()
world.text = tmp
world.save()
hello_world_objects_all = HelloWorld.objects.all()
return HttpResponseRedirect(reverse('accountapp:hello_world'))
else:
hello_world_objects_all = HelloWorld.objects.all()
return render(request, 'accountapp/hello_world.html', context={'hello_world_list': hello_world_objects_all})
class AccountCreateView(CreateView):
model = User
form_class = UserCreationForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'accountapp/create.html'
class AccountDetailView(DetailView):
model = User
context_object_name = 'target_user'
template_name = 'accountapp/detail.html'
@method_decorator(has_ownership, 'get')
@method_decorator(has_ownership, 'post')
class AccountUpdateView(UpdateView):
model = User
context_object_name = 'target_user'
form_class = AccountUpdateForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'accountapp/update.html'
@method_decorator(has_ownership, 'get')
@method_decorator(has_ownership, 'post')
class AccountDeleteView(DeleteView):
model = User
context_object_name = 'target_user'
success_url = reverse_lazy('accountapp:login')
template_name = 'accountapp/delete.html'