๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Python Programming/Frameworks

< django - 16 >

by A Lim Han 2022. 8. 6.

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 ํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

ํŒŒ์ผ๋ช…์€&nbsp;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/ ํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ถœ  -->  ์Šˆํผ ์œ ์ €๋กœ ๋กœ๊ทธ์ธ & ๋กœ๊ทธ์•„์›ƒ ์‹œ๋„

๋กœ๊ทธ์ธ ์ƒํƒœ

 

๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ

 

'โœ’๏ธ Python Programming > Frameworks' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

< django - 18 >  (0) 2022.08.07
< django - 17 >  (0) 2022.08.07
< django - 15 >  (0) 2022.08.06
< django - 14 >  (0) 2022.08.05
< django - 13 >  (0) 2022.08.05