Menu
CoddyTech

로그인 필요

Coddy Django 여정의 사용자와 계정 섹션에 포함된 레슨. 16개 중 6번째.

누구나 /new/를 열고 로그인 여부와 관계없이 메모를 작성할 수 있습니다. 새 메모 링크를 숨겨도 소용없습니다. 방문자는 주소를 직접 입력할 수 있습니다. 뷰 자체에서 접근을 거부해야 합니다.

데코레이터는 함수 위에 위치하며 함수에 추가 코드를 적용하는 @로 시작하는 한 줄입니다. @login_required는 뷰가 실행되기 전에 request.user를 확인합니다. 상점에서는 결제 페이지를 보호합니다.

from django.contrib.auth.decorators import login_required


@login_required
def checkout(request):
    ...

로그인한 사용자는 페이지를 볼 수 있습니다. 방문자는 자신이 원했던 페이지가 주소에 포함된 로그인 페이지로 리디렉션됩니다. /accounts/login/?next=/checkout/ 로그인한 후에는 LoginView가 방문자를 해당 페이지로 돌려보냅니다. 로그인 페이지의 주소는 LOGIN_URL 설정이며, 기본값은 /accounts/login/입니다. 이미 설정된 주소도 이와 같습니다.

challenge icon

챌린지

쉬움
  • 로그인한 사용자만 메모를 작성, 수정 또는 삭제할 수 있습니다.
  • 메모 목록과 각 메모 페이지는 누구나 볼 수 있습니다.

실행을 누르고 로그아웃한 상태에서 /new/를 여세요. ada(비밀번호 coddy-pass-123)로 로그인하면 다시 /new/로 돌아옵니다.

직접 해보기

from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import get_object_or_404, redirect, render

from .forms import NoteForm
from .models import Note


def note_list(request):
    notes = Note.objects.all()
    return render(request, "notes/note_list.html", {"notes": notes})


def note_detail(request, pk):
    note = get_object_or_404(Note, pk=pk)
    return render(request, "notes/note_detail.html", {"note": note})


def note_create(request):
    if request.method == "POST":
        form = NoteForm(request.POST)
        if form.is_valid():
            note = form.save()
            return redirect("notes:detail", pk=note.pk)
    else:
        form = NoteForm()
    return render(request, "notes/note_form.html", {"form": form})


def note_edit(request, pk):
    note = get_object_or_404(Note, pk=pk)
    if request.method == "POST":
        form = NoteForm(request.POST, instance=note)
        if form.is_valid():
            form.save()
            return redirect("notes:detail", pk=note.pk)
    else:
        form = NoteForm(instance=note)
    return render(request, "notes/note_form.html", {"form": form, "note": note})


def note_delete(request, pk):
    note = get_object_or_404(Note, pk=pk)
    if request.method == "POST":
        note.delete()
        return redirect("notes:list")
    return render(request, "notes/note_confirm_delete.html", {"note": note})


def signup(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect("notes:list")
    else:
        form = UserCreationForm()
    return render(request, "notes/signup.html", {"form": form})

사용자와 계정의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드