A Lim Han 2022. 8. 6. 17:30

16. django.contrib.auth μ•± + 둜그인과 λ‘œκ·Έμ•„μ›ƒ + common μ•± + 둜그인 λ·° + 둜그인 ν…œν”Œλ¦Ώ

 

 

 

# django.contrib.auth μ•±

: μž₯고의 둜그인, 아웃을 λ„μ™€μ£ΌλŠ” μ•±μœΌλ‘œ, μž₯κ³  ν”„λ‘œμ νŠΈκ°€ 생성될 λ•Œ μžλ™μœΌλ‘œ 좔가됨

 

 

 

 

# common μ•±

: 곡톡 κΈ°λŠ₯을 κ°€μ§„ μ•±μœΌλ‘œ, 둜그인과 λ‘œκ·Έμ•„μ›ƒμ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©

 

1. λͺ…λ Ή ν”„λ‘¬ν¬νŠΈμ— common 앱을 μƒˆλ‘œ μƒμ„±ν•œλ‹€.

+ common μ•± 생성 μ‹œ pybo μ•±κ³Ό 같은 ꡬ쑰의 디렉터리, νŒŒμΌλ“€μ΄ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§.

 

 

 

2. projects\mysite\config\settings.py νŒŒμΌμ— μƒˆλ‘œ μƒμ„±ν•œ common 앱을 λ“±λ‘ν•œλ‹€.

 

 

 

3. common μ•±μ˜ urls.py νŒŒμΌμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ config/urls.py νŒŒμΌμ„ λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•œλ‹€.

파일λͺ…은 projects\mysite\config\urls.py

+ 이제 http://localhost:8000/common/ μœΌλ‘œ μ‹œμž‘ν•˜λŠ” URL은 λͺ¨λ‘ common/urls.py νŒŒμΌμ„ μ°Έμ‘°ν•˜κ²Œ 됨

 

 

 

4. common/urls.py νŒŒμΌμ„ μ•„λž˜μ²˜λŸΌ μƒˆλ‘œ μž‘μ„±ν•œλ‹€.

아직 common 앱에 μ–΄λ–€ κΈ°λŠ₯도 κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ urlpatterns은 곡백으둜 남기기

 

 

 

 

# 둜그인과 둜그인 λ·°, 둜그인 ν…œν”Œλ¦Ώ

1. 둜그인 ν™”λ©΄μœΌλ‘œμ˜ μ§„μž…μ„ μœ„ν•΄ projects\mysite\templates\navbar.html 파일의 둜그링 링크λ₯Ό μ•„λž˜μ²˜λŸΌ μˆ˜μ •ν•œλ‹€.

Line 16 μˆ˜μ •

 

 

 

2. projects\mysite\common\urls.py νŒŒμΌμ— μ•„λž˜μ™€ 같은 λ§€ν•‘ κ·œμΉ™ μΆ”κ°€  <--  navbar.html νŒŒμΌμ—μ„œ ν…œν”Œλ¦Ώ νƒœκ·Έλ‘œ {% url 'common:login' %}λ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έ

Line 1, 2, 7 μΆ”κ°€

+ 둜그인 λ·°λŠ” λ”°λ‘œ λ§Œλ“€μ§€ μ•Šκ³  μœ„μ˜ μ½”λ“œμ²˜λŸΌ django.contrib.auth μ•±μ˜ LoginViewλ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ„€μ •

 

 

 

3. http:/localhost:8000/pybo/ λ₯Ό 뢈러온 λ’€ λ„€λΉ„κ²Œμ΄μ…˜ λ°”μ˜ 둜그인 링크 클릭  -->  μ•„λž˜μ™€ 같은 였λ₯˜ νŽ˜μ΄μ§€ 좜λ ₯

+ LoginViewλŠ” registrationμ΄λΌλŠ” ν…œν”Œλ¦Ώ λ””λ ‰ν„°λ¦¬μ—μ„œ login.html νŒŒμΌμ„ μ°ΎλŠ”λ°, μœ„ 였λ₯˜λŠ”  registration 디렉터리에 login.html 파일이 없을 λ•Œ λ‚˜νƒ€λ‚¨  -->  registration/login.html ν…œν”Œλ¦Ώ νŒŒμΌμ„ μž‘μ„±ν•¨μœΌλ‘œμ¨ 문제 ν•΄κ²° κ°€λŠ₯

 

 

 

4. LoginViewκ°€ common λ””λ ‰ν„°λ¦¬μ˜ ν…œν”Œλ¦Ώμ„ μ°Έμ‘°ν•  수 μžˆλ„λ‘ common/urls.py νŒŒμΌμ„ μ•„λž˜μ™€ 같이 μˆ˜μ •

파일λͺ…은&nbsp;projects\mysite\common\urls.py

+ registration 디렉터리가 μ•„λ‹Œ common λ””λ ‰ν„°λ¦¬μ—μ„œ login.html νŒŒμΌμ„ μ°Έμ‘°ν•˜κ²Œ 섀정함 <--  λ‘œκ·ΈμΈμ€ common 앱에 κ΅¬ν˜„ν•  κ²ƒμ΄λ―€λ‘œ μœ„μ˜ 였λ₯˜ λ©”μ‹œμ§€μ—μ„œ ν‘œμ‹œν•œ κ²ƒμ²˜λŸΌ registration 디렉터리에 ν…œν”Œλ¦Ώ νŒŒμΌμ„ μƒμ„±ν•˜κΈ°λ³΄λ‹€λŠ” common 디렉터리에 ν…œν”Œλ¦Ώμ„ μƒμ„±ν•˜λŠ” 것이 더 λ‚˜μŒ

 

 

 

5. λ‹€μ‹œ http:/localhost:8000/pybo/  νŽ˜μ΄μ§€λ₯Ό 뢈러였고 둜그인 링크 클릭 --> λ‹€λ₯Έ 였λ₯˜ λ©”μ„Έμ§€ & μ°½ 좜λ ₯

registration/login.html 이 μ•„λ‹Œ&nbsp; common/login.html 이 μ—†λ‹€λŠ” 였λ₯˜λ‘œ λ³€κ²½

 

 

 

6. 5번의 였λ₯˜ 해결을 μœ„ν•΄ common/login.html νŒŒμΌμ„ μƒμ„±ν•˜κΈ° μœ„ν•œ common ν…œν”Œλ¦Ώ 디렉터리λ₯Ό λ‹€μŒκ³Ό 같이 생성

 

 

 

7. common ν…œν”Œλ¦Ώ 디렉터리에 login.html ν…œν”Œλ¦Ώμ„ λ‹€μŒκ³Ό 같이 μƒˆλ‘œ μž‘μ„±

파일λͺ…은 projects\mysite\templates\common\login.html

+ μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έμ™€ 아이디λ₯Ό μž…λ ₯λ°›μ•„ 둜그인이 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” ν…œν”Œλ¦Ώ

 

+ django.contrib.auth μ•±μ΄ μš”κ΅¬ν•˜λŠ” ν•˜λŠ” ν•„μˆ˜ν•­λͺ©

-->  λ‘œκ·ΈμΈμ— μ“°μ΄λŠ” μ‚¬μš©μž 아이디(μ‚¬μš©μžλͺ…)λ₯Ό μ˜λ―Έν•˜λŠ” ν•­λͺ© username, λΉ„λ°€λ²ˆν˜Έλ₯Ό μ˜λ―Έν•˜λŠ” password ν•­λͺ©

 

 

 

8. {% csrf_token %} λ°”λ‘œ 밑에 include νƒœκ·Έλ‘œ ν¬ν•¨λœ form_errors.html ν…œν”Œλ¦Ώ νŒŒμΌμ„ μ•„λž˜μ™€ 같이 μƒˆλ‘œ μž‘μ„±ν•œλ‹€.

파일λͺ…은&nbsp;projects\mysite\templates\form_errors.html

+ μœ„ ν…œν”Œλ¦Ώμ€ 둜그인 μ‹€νŒ¨ μ‹œ 둜그인 μ‹€νŒ¨ 이유λ₯Ό μ•Œλ €μ£ΌλŠ” 역할을 ν•˜λ©°, ν•„λ“œ 였λ₯˜μ™€ λ„Œν•„λ“œ 였λ₯˜λ₯Ό λͺ¨λ‘ ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ‚½μž…λ¨

 

+ 폼 였λ₯˜μ˜ μ’…λ₯˜

ν•„λ“œ 였λ₯˜ (field.errors) λ„Œν•„λ“œ 였λ₯˜ (form.non_field_errors)
μ‚¬μš©μžκ°€ μž…λ ₯ν•œ ν•„λ“œ 값에 λŒ€ν•œ 였λ₯˜λ‘œ 값이 λˆ„λ½λ˜μ—ˆκ±°λ‚˜ ν•„λ“œμ˜ ν˜•μ‹μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— λ°œμƒν•˜λŠ” 였λ₯˜ ν•„λ“œμ˜ κ°’κ³ΌλŠ” 상관없이 λ‹€λ₯Έ 이유둜 λ°œμƒν•˜λŠ” 였λ₯˜

 

 

 

 

# 둜그인 μˆ˜ν–‰

1. http:/localhost:8000/pybo/  νŽ˜μ΄μ§€λ₯Ό 호좜 ν›„ λ„€λΉ„κ²Œμ΄μ…˜λ°”μ˜ 둜그인 링크 클릭 --> 아무 λ‚΄μš©λ„ μž…λ ₯ν•˜μ§€ μ•Šκ³  둜그인 λ²„νŠΌ 클릭해보기

둜그인 링크λ₯Ό ν΄λ¦­ν–ˆμ„ λ•Œ λ‚˜νƒ€λ‚˜λŠ” ν™”λ©΄

 

아무 λ‚΄μš©λ„ μž…λ ₯ν•˜μ§€ μ•Šκ³  둜그인 λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ λ‚˜νƒ€λ‚˜λŠ” ν™”λ©΄

 

 

 

2. ν˜„μž¬ μœ μΌν•˜κ²Œ λ‘œκ·ΈμΈν•  수 μžˆλŠ” μŠˆνΌμœ μ € alim을 μ‚¬μš©μž 아이디에, kprpm359을 λΉ„λ°€λ²ˆν˜Έμ— μž…λ ₯ν•˜μ—¬ 둜그인 μˆ˜ν–‰ν•΄λ³΄κΈ°

+ 둜그인이 μ„±κ³΅ν•˜λ©΄ django.contrib.auth νŒ¨ν‚€μ§€λŠ” λ””ν΄νŠΈλ‘œ /accounts/profile/ μ΄λΌλŠ” URL둜 μ΄λ™μ‹œν‚€κΈ° λ•Œλ¬Έμ— 였λ₯˜ λ°œμƒ

 

 

 

3. 2번의 였λ₯˜ 해결을 μœ„ν•΄ λ‘œκ·ΈμΈ 성곡 μ‹œ / νŽ˜μ΄μ§€λ‘œ 이동할 수 μžˆλ„λ‘ config/settings.py νŒŒμΌμ˜ λ§ˆμ§€λ§‰ 쀄에 LOGIN_REDIRECT_URL μΆ”κ°€

파일λͺ…은 projects\mysite\config\settings.py, Line 131 μΆ”κ°€

+  / νŽ˜μ΄μ§€  -->  κΈ°λ³Έ URL인 http://localhost:8000/ νŽ˜μ΄μ§€

 

 

 

4. λ‹€μ‹œ http://localhost:8000/ νŽ˜μ΄μ§€ μš”μ²­ ν›„ 둜그인 μˆ˜ν–‰  -->  /λ₯Ό μ˜λ―Έν•˜λŠ” http://localhost:8000/ νŽ˜μ΄μ§€μ— λŒ€ν•œ URL λ§€ν•‘ κ·œμΉ™μ„ μž‘μ„±ν•˜μ§€ μ•Šμ•˜κΈ°μ— μ—λŸ¬ λ°œμƒ

 

 

 

5. 4번의 였λ₯˜λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•΄ C:\projects\mysite\config\urls.py νŒŒμΌμ— / νŽ˜μ΄μ§€μ— λŒ€μ‘ν•˜λŠ” URL λ§€ν•‘ κ·œμΉ™ μΆ”κ°€

Line 3, 9 μˆ˜μ •

+ / νŽ˜μ΄μ§€ μš”μ²­ μ‹œ path('', views.index, name='index')κ°€ μž‘λ™ν•˜μ—¬ pybo/views.py νŒŒμΌμ˜ index ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ²Œ 섀정함

 

 

 

 

# λ‘œκ·Έμ•„μ›ƒ

1. http://localhost:8000/ νŽ˜μ΄μ§€ μš”μ²­  --> 둜그인이 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμŒμ—λ„ λ‘œκ·Έμ•„μ›ƒμ΄ μ•„λ‹Œ 둜그인 λ²„νŠΌμ΄ λ³΄μž„

 

 

 

2. projects\mysite\templates\navbar.html νŒŒμΌμ—μ„œ 둜그인 링크 뢀뢄을 μ•„λž˜μ™€ 같이 μˆ˜μ •

Line 16 ~ 18, 20 μΆ”κ°€

+ << Line 16 >>

: {% if user.is_authenticated %} -->  ν˜„μž¬ μ‚¬μš©μžκ°€ 둜그인 λ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό νŒλ³„ν•˜μ—¬ 둜그인이 λ˜μ–΄μžˆλ‹€λ©΄ λ‘œκ·Έμ•„μ›ƒ 링크λ₯Ό, λ°˜λŒ€μ˜ κ²½μš°μ—λŠ” 둜그인 링크λ₯Ό ν‘œμ‹œ

 

+ << Line 17 >>

: 둜그인이 λ˜μ–΄μžˆλŠ” 경우 λ‘œκ·Έμ•„μ›ƒ 링크에 μ‚¬μš©μžλͺ…도 μΆ”κ°€λ‘œ ν‘œμ‹œν•˜λ„λ‘ μ„€μ •

 

+ ν…œν”Œλ¦Ώμ—μ„œμ˜ User μ‚¬μš©

: λ·°ν•¨μˆ˜μ—μ„œ ν…œν”Œλ¦Ώμ— User 객체λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šλ”λΌλ„ ν…œν”Œλ¦Ώμ—μ„œλŠ” django.contrib.auth κΈ°λŠ₯으둜 인해 User 객체λ₯Ό μ‚¬μš©ν•  수 있음

user.is_authenticated ν˜„μž¬ μ‚¬μš©μžκ°€ μΈμ¦λ˜μ—ˆλŠ”μ§€μ— λŒ€ν•œ μ—¬λΆ€ (둜그인 μƒνƒœμ—μ„œλŠ” true, λ‘œκ·Έμ•„μ›ƒ μƒνƒœμ—μ„œλŠ” false)
user.is_anonymous is_authenticated의 λ°˜λŒ€λ˜λŠ” 경우 (둜그인된 κ²½μš°μ—λŠ” false, λ‘œκ·Έμ•„μ›ƒ μƒνƒœμ˜ 경우 true)
user.username μ‚¬μš©μžλͺ… = μ‚¬μš©μž ID
user.is_superuser μ‚¬μš©μžκ°€ μŠˆνΌμœ μ €μΈμ§€μ— λŒ€ν•œ μ—¬λΆ€

 

 

 

3. λ‘œκ·Έμ•„μ›ƒ 링크가 μΆ”κ°€λ˜μ—ˆμœΌλ―€λ‘œ {% url 'common:logout' %}에 λŒ€μ‘ν•˜λŠ” URL 맀핑을 projects\mysite\common\urls.py νŒŒμΌμ— μΆ”κ°€

Line 8 μΆ”κ°€

 

 

 

4. λ‘œκ·Έμ•„μ›ƒ μ‹œ λ¦¬λ‹€μ΄λ ‰νŠΈν•  μœ„μΉ˜λ„ projects\mysite\config\settings.py νŒŒμΌμ— μΆ”κ°€

Line 134, 135 μΆ”κ°€

+ λ‘œκ·Έμ•„μ›ƒ μ‹œ / νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜κΈ° μœ„ν•΄ LOGOUT_REDIRECT_URL을 μ„€μ •

 

 

 

5. λ‹€μ‹œ http://localhost:8000/ νŽ˜μ΄μ§€λ₯Ό 호좜  -->  슈퍼 μœ μ €λ‘œ 둜그인 & λ‘œκ·Έμ•„μ›ƒ μ‹œλ„

둜그인 μƒνƒœ

 

λ‘œκ·Έμ•„μ›ƒ μƒνƒœ