Pragmatic - 3

HeeJune KIM·2023년 5월 22일
0

Django_Pinterest

목록 보기
12/13

☘️ Authentication 인증시스템 구축 & Decorator를 이용한 코드 간소화

  1. views.py 파일에서 AccountUpdateViewAccountDeleteView 클래스의 context_object_name을 'target_user'로 설정합니다.
  2. delete.htmlupdate.html 템플릿 파일에서 user.pktarget_user.pk로 변경합니다.
  3. urls.py 파일에서 'account/'를 'accounts/'로 변경합니다.
  4. login_required 데코레이터를 사용하여 hello_world 함수에 인증 요구사항을 추가합니다.
  5. AccountCreateView 클래스에 login_required 데코레이터를 사용하여 인증 요구사항을 추가합니다.
  6. AccountDetailView, AccountUpdateView, AccountDeleteView 클래스에 has_ownership 데코레이터를 사용하여 인증 및 소유권 요구사항을 추가합니다.
  7. account_ownership_required 데코레이터를 정의하고, 해당 데코레이터를 has_ownership 리스트에 추가합니다.
  8. 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'

0개의 댓글

관련 채용 정보