회원가입과 로그인 기능 추가하기1

김의석 ·2024년 4월 11일
0

Django

목록 보기
23/39

기획자의 플로우차트를 토대로 회원가입과 로그인 기능 추가(4월 11일~)

django.contrib.auth로 구현하기

점프투 장고 로그인 기능 구현 참고

Common app(공통의 기능) 생성

app 생성 및 settings.py 등록

django-admin startapp common
  • 참고 문서에서 모든 앱에서 공통으로 사용되는 기능(로그인, 로그아웃)을 특정 하나의 앱, 나의 프로젝트에서는 checking 앱에 종속 시키지 않는 것이 좋다고 한다. 이유는 다음과 같다!
    • 재사용성
    • 유지 보수 용이성
    • 모듈화
    • 확장성
    • 출처
INSTALLED_APPS = [
    # django apps
    "common",
]
  • common app 생성후 프로젝트의 settings.py에 등록!
    • settings.py에 app을 더욱 명시적으로 등록하기
      GPT 참고

urls.py 설정

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("checking.urls")),
    path("common/", include("common.urls")),
    path("accounts/", include("allauth.urls"))
    # path("checking/", include("checking.urls")),
    # path("checking/date/", include("checking.urls")),
]
  • 프로젝트의 urls.py
app_name = 'common'

urlpatterns = [
]
  • app 내 urls.py

로그인

로그인 뷰

from django.urls import path
from django.contrib.auth import views as auth_views

app_name = "common"

urlpatterns = [
    path(
        "login/",
        auth_views.LoginView.as_view(template_name="common/login.html"),
        name="login",
    ),
]
  • 로그인 뷰는 따로 만들 필요없이 django.contrib.auth 앱의 LoginView를 사용한다!

로그인 템플릿

auth_views.LoginView.as_view(template_name="common/login.html") # 생성한 템플릿 경로 명시.
  • LoginViews는 registration이라는 템플릿 디렉터리에서 login.html 파일을 찾는다!

  • 특정 app에 로그인을 구현할 경우에는 registration 디렉토리가 아닌 app내에 templates 디렉토리를 생성하는 것이 좋다.

    • 참고문서를 통해 Poko 프로젝트에 사진과 같이 템플릿을 생성하였다!
  • 로그인창 생성 완료!

로그인 수행

  • admin으로 로그인 후
    • 참고문서에 따르면 로그인이 성공하면 django.contrib.auth 패키지는 디폴트로 /accounts/profile/ 이라는 URL로 이동시킨다고 한다!

  • 프로젝트의 settins.py에 로그인 후 이동할 URL을 입력한다.

로그아웃

<li class="nav-item">
          {% if user.is_authenticated %}
            <a class="nav-link" href="{% url 'common:logout' %}">{{ user.username }} (로그아웃)</a>
          {% else %}
            <a class="nav-link" href="{% url 'common:login' %}">로그인</a>
          {% endif %}
</li>
  • 로그아웃을 index.html nav태그에 다음 코드를 추가!
    • {% if user.is_authenticated %} : 현재 사용자가 인증 되었는지 여부확인
    • href="{% url 'common:logout' %}" : 아니면 common/logput/에 대응하는 url 링크가 생성.
    • else면 로그인 url로 이동!

  • common의 urls.py에서 위에서 작성한 url 'common:logout'에 대응되는 url을 라우팅한다.

  • common의 views.py로 이동하여 라우팅된 url에 대응되는 동작을 작성한다!
    • 해당프로젝트에서는 로그아웃시 /index/ url로 redirect하게 했다!

로그인 로그아웃 확인!

  • 로그인 시작화면

  • 로그인 화면

  • 로그인 후 로그아웃 생성

Django-allauth로 구현하기

Django-allauth 공식 홈페이지

profile
널리 이롭게

0개의 댓글