login logout - pai-plznw4me/django-initializer GitHub Wiki

๋ชฉ์ 

Django ๊ธฐ๋ณธ ๋‚ด์žฅ login ๋ฐ logout ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๋ชฉ์ฐจ

  1. login

  2. logout

1. Login

1.0 ์‚ฌ์ „ ์ค€๋น„

1. project ์ƒ์„ฑ
2. app ์ƒ์„ฑ
3. project ์— ์•ฑ ๋“ฑ๋ก
4. migrate ์ˆ˜ํ–‰ํ•˜๊ธฐ
5. create super user (id : admin , pw : 1234)

1.1 auth app ๋“ฑ๋ก

  • settings.py ์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€
# django settings.py 
# ์ƒ์„ฑํ•œ app ๋“ฑ๋ก
INSTALLED_APPS = [
...
    'django.contrib.auth', 
]

# pre installed app์—์„œ ๋ฐ”๋ผ๋ณด๋Š” templates ์œ„์น˜
TEMPLATES = [
    {
        ...
        'DIRS': [str(BASE_DIR.joinpath('templates'))],
        ... 

1.2. auth url ๋“ฑ๋กํ•˜๊ธฐ

  • ํ”„๋กœ์ ํŠธ ํด๋” ์•„๋ž˜ urls.py ์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€
โ”œโ”€โ”€ <project name>
		โ”œโ”€โ”€urls.py < -- โœ”๏ธ
โ”œโ”€โ”€ manage.py

  • ์ถ”๊ฐ€ ๋  ์ฝ”๋“œ
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
...
    path('accounts/', include('django.contrib.auth.urls')), 
	  path('accounts/', include('account.urls')), # <-- ์—ฌ๋Ÿฌ ์•ฑ์˜ urls์„ ์ค‘๋ณต ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.
]
Auth view ๋ชฉ๋ก ```python accounts/login/ [name='login'] accounts/logout/ [name='logout'] accounts/password_change/ [name='password_change'] accounts/password_change/done/ [name='password_change_done'] accounts/password_reset/ [name='password_reset'] accounts/password_reset/done/ [name='password_reset_done'] accounts/reset/// [name='password_reset_confirm'] accounts/reset/done/ [name='password_reset_complete']```

1.3. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์ƒ์„ฑ

/account/login ์œผ๋กœ ์ ‘์†์‹œ ๋ณด์—ฌ์ง€๋Š” Web template ์„ ๋งŒ๋“ค์–ด ๋ณด์ž

1.3.1 template ์œ„์น˜ ๋ณ€๊ฒฝํ•˜๊ธฐ

LoginView ๋กœ ์ด๋™ํ•˜์ž. (auth app login view ๋Š” LoginView ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ด€๋ จ ์„ค์ •์ด ํ•ด๋‹น ๋ทฐ ํด๋ž˜์Šค์— ์ €์žฅ ๋˜์–ด ์žˆ๋‹ค.)

LoginView๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (โ€ป LoginView ๋Š” from django.contrib.auth.views import LoginView ์— ์ •์˜ ๋˜์–ด ์žˆ๋‹ค.)

class LoginView(RedirectURLMixin, FormView):
    """
    Display the login form and handle the login action.
    """

    form_class = AuthenticationForm
    authentication_form = None
    template_name = "registration/login.html"  # <-- โ—๏ธ ์—ฌ๊ธฐ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
    redirect_authenticated_user = False
    extra_context = None
   ...

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด template_name = "registration/login.html" ๋ถ€๋ถ„์„ template_name = "account/login.html"์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

1.3.2 templates/account/login.html page ์ƒ์„ฑ

templates/account/ page ํ•ด๋‹น ๊ฒฝ๋กœ์— login.html ์„ ์ƒ์„ฑํ•œ๋‹ค.

์ƒ์„ฑ๋œ html ์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

<!-- templates/account/login.html -->
<h2>Log In</h2>
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log In</button>
</form>

1.4. Redirect page ์„ค์ •ํ•˜๊ธฐ

๋กœ๊ทธ์ธ ํ›„ ํŠน์ • ์›น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

settings.py ์— ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ์›น ์ฃผ์†Œ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

# settings.py
LOGIN_REDIRECT_URL = '/account/index'

์œ„ ์˜ˆ์ œ์—๋Š” account app view ์— index๊ฐ€ ๋“ฑ๋ก ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ๋‹ค. )

1.5 ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ

๋กœ๊ทธ์ธ ์„ ํ•˜๋ฉด User instance ์ •๋ณด์ธ user ์ •๋ณด๊ฐ€ html ๋กœ ๋“ค์–ด์˜จ๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ is_authenticated = True ์ž„์„ ๋ˆˆ ์—ฌ๊ฒจ ๋ณด์ž) user_info

Logout

1.1 auth app ๋“ฑ๋ก ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ๋‹จ์ˆœํžˆ /accounts/logout url ๋กœ ์ ‘์†ํ•˜๋ฉด ๋œ๋‹ค.

2. ๋กœ๊ทธ ์•„์›ƒ์‹œ ํŠน์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ ํ•˜๊ธฐ

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์™€ ๊ฐ™๊ฒŒ settings.py ์— logout ์„ฑ๊ณต ์‹œ ์ด๋™ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์ •์˜ํ•ด ๋‘”๋‹ค.

LOGOUT_REDIRECT_URL = 'home' # new

Reference

https://wikidocs.net/71259 https://learndjango.com/tutorials/django-login-and-logout-tutorial

โš ๏ธ **GitHub.com Fallback** โš ๏ธ