준호씨의 블로그

정원사들 출석부 - 로그인 유저만 접근 가능한 페이지 생성 본문

개발이야기

정원사들 출석부 - 로그인 유저만 접근 가능한 페이지 생성

준호씨 2021. 1. 30. 23:15
반응형

 

 

정원사들 출석부. 로그인 기능 추가

이전 글 정원사들 시즌6 시작. 출석부 만들기 2021-01-18 (월) 정원사들 시즌6가 시작되었습니다. 정원사들은 간단히 말하면 github에 일일 커밋을 하는 모임이라고 보면 됩니다. 커밋을 할 때마다 초

junho85.pe.kr

지난번에는 로그인 기능을 추가했었는데요.

이번에는 로그인한 유저만 접근 가능한 페이지를 만들어 보았습니다.

수정한 내용은 다음 커밋 내역을 보면 알 수 있습니다.

 

tools app 추가. admin 용 운영툴 · junho85/garden6@747f3a9

login url 설정 login 시 redirect url을 tools로 지정 로그인 후 next 로 이동 하도록 form 추가

github.com

tools 앱 추가

기본적으로 django는 admin기능을 가지고 있습니다. admin을 커스텀하게 잘 수정하는 방법도 있겠지만 저는 별도의 페이지를 생성해 보기로 했습니다.

admin이랑 겹치지 않게 tools라는 앱을 추가하였습니다.

python manage.py startapp tools

 

templates/tools/index.html

templates/tools/index.html 파일을 작성합니다.

{% extends 'attendance/base.html' %}

{% block content %}

    TODO

{% endblock %}

아직 아무 기능 없는 빈 페이지입니다.

garden6.junho85.pe.kr/tools에 접근하면 나타나는 페이지인데 로그인한 사용자만 접근 가능합니다.

 

tools/views.py

from django.shortcuts import render
from django.contrib.auth.decorators import login_required


@login_required
def index(request):
    context = {
    }
    return render(request, 'tools/index.html', context)

views.py에 앞서 작성한 index.html를 연결합니다.

중요한 건 @login_required 데코레이터입니다. 이 데코레이터를 이용하면 로그인한 사용자만 접근하는 view로 설정됩니다.

 

tools/urls.py

from django.urls import path
from . import views

app_name = 'tools'

urlpatterns = [
    path('', views.index, name='index'), # 관리툴 첫화면
]

tools의 url 라우팅을 설정하여 views.index와 연결합니다.

 

garden6/urls.py

path('tools/', include('tools.urls')),

여기에 tools를 추가해야 tools/urls.py가 동작합니다.

 

login 관련 코드 개선

garden6/settings.py

LOGIN_URL = '/common/login'

로그인이 필요한 경우 이동되는 url을 설정합니다.

 

LOGIN_REDIRECT_URL = '/tools'

로그인 후 리다이렉트 될 url을 tools로 바꿨습니다. 로그인하고 나면 여기로 이동됩니다.

 

templates/login.html

<input type="hidden" name="next" value="{{ next }}">

기존 로그인폼 코드에 next input을 추가합니다.

로그인이 필요한 페이지에 접근하면 자동으로 url뒤에 "?next=접근경로"가 추가되는데요. 로그인 후 해당 url로 이동할 수 있도록 합니다.

앞서 설정한 LOGIN_REDIRECT_URL과 동작이 겹치는데요. LOGIN_REDIRECT_URL은 next 파라미터가 없는 경우 동작합니다. next 파라미터가 우선순위가 더 높다고 보면 됩니다.

참고: docs.djangoproject.com/en/3.1/ref/settings/

 

Settings | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

이제 본격적으로 관리자만 사용 가능한 기능들을 추가할 수 있겠네요.

반응형
Comments