로그인 필요
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/입니다. 이미 설정된 주소도 이와 같습니다.
챌린지
쉬움- 로그인한 사용자만 메모를 작성, 수정 또는 삭제할 수 있습니다.
- 메모 목록과 각 메모 페이지는 누구나 볼 수 있습니다.
실행을 누르고 로그아웃한 상태에서 /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 플레이그라운드