Pragmatic - 1

HeeJune KIM·2023년 5월 22일
0

Django_Pinterest

목록 보기
10/13

☘️ Login/Logout 구현

  1. LoginView와 LogoutView 클래스 django.contrib.auth.views에서 가져옵니다.
  2. urls.py 파일에서 LoginView를 사용하여 로그인 URL을 설정합니다. template_name 매개변수를 통해 로그인에 사용할 템플릿을 지정합니다.
  3. 마찬가지로 LogoutView를 사용하여 로그아웃 URL을 설정합니다. 별도의 템플릿을 사용하지 않으므로 template_name 매개변수를 생략합니다.
  4. next 방식을 구현하기 위해 로그인 버튼과 로그아웃 버튼이 있는 HTML 템플릿을 작성합니다. user.is_authenticated 조건문을 사용하여 로그인 상태에 따라 다른 버튼을 보여줍니다. 로그인 버튼의 href 속성에 ?next={{ request.path }}를 추가하여 다시 해당 페이지로 리다이렉트합니다.
  5. settings.py 파일에서 LOGIN_REDIRECT_URL과 LOGOUT_REDIRECT_URL을 설정하여 로그인 및 로그아웃 후의 리다이렉션 URL을 지정합니다.
from django.contrib.auth.views import LoginView, LogoutView
from django.urls import path, include
from accountapp.views import hello_world, AccountCreateView

app_name = 'accountapp'

urlpatterns = [
    path('hello_world/', hello_world, name='hello_world'),

    path('login/', LoginView.as_view(template_name='accountapp/login.html'), name='login'), 
    path('logout/', LogoutView.as_view(), name='logout'), 
    path('create/', AccountCreateView.as_view(), name='create'),

]

© Login

{% extends 'base.html' %}

{% block content %}

<div style="text-align: center;">
	<div>
		<h4>Login</h4>
	</div>
    <div>
	    <form action="" method="post">
        {% csrf_token %}
            {{ form }}
            <input type="submit" class="btn btn-primary">
        </form>
    </div>
</div>

{% endblock %}

☘️ DetailView를 이용한 개인 페이지 구현

  1. DetailView 클래스를 django.views.generic에서 가져옵니다.
  2. AccountDetailView를 정의하고, model 속성에 User 모델을 지정합니다.
  3. context_object_name 속성을 사용하여 템플릿에서 사용할 컨텍스트 변수의 이름을 지정합니다. 여기서는 'target_user'로 설정되어 있습니다.
  4. template_name 속성을 사용하여 템플릿 파일의 경로를 지정합니다. 여기서는 'accountapp/detail.html'로 설정되어 있습니다.
  5. URL 패턴에 <int:pk>를 사용하여 해당 계정의 고유한 기본 키(primary key)를 받아옵니다. 이를 통해 상세 정보를 조회할 계정을 식별하고, DetailView가 호출될 때 해당 계정 정보를 제공합니다.
  6. detail.html 템플릿 파일을 작성합니다. 상세 정보를 보여주는 컨텐츠를 구성하며, target_user 컨텍스트 변수를 사용하여 계정의 속성(예: date_joined, username)을 출력합니다.

© View

from django.views.generic import CreateView, DetailView

# 생략

class AccountDetailView(DetailView):
    model = User
    context_object_name = 'target_user'
    template_name = 'accountapp/detail.html'

© accountapp/urls

from django.contrib.auth.views import LoginView, LogoutView
from django.urls import path, include
from accountapp.views import hello_world, AccountCreateView, AccountDetailView

app_name = 'accountapp'

urlpatterns = [
	
	# 생략
    path('detail/<int:pk>/', AccountDetailView.as_view(), name='detail'),

© Template

{% extends 'base.html' %}

{% block content %}

    <div>
	    <div style="text-align: center; max-width: 500px; margin: 4rem auto;">
	    	<p>
                {{target_user.date_joined}}
            </p>
	    	<h2 style="font-family: 'NanumSquareB'">
                {{target_user.username}}
            </h2>
	    </div>
</div>

{% endblock %}

0개의 댓글

관련 채용 정보