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 ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
+ ์ด์ http://localhost:8000/common/ ์ผ๋ก ์์ํ๋ URL์ ๋ชจ๋ common/urls.py ํ์ผ์ ์ฐธ์กฐํ๊ฒ ๋จ
4. common/urls.py ํ์ผ์ ์๋์ฒ๋ผ ์๋ก ์์ฑํ๋ค.
# ๋ก๊ทธ์ธ๊ณผ ๋ก๊ทธ์ธ ๋ทฐ, ๋ก๊ทธ์ธ ํ ํ๋ฆฟ
1. ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก์ ์ง์ ์ ์ํด projects\mysite\templates\navbar.html ํ์ผ์ ๋ก๊ทธ๋ง ๋งํฌ๋ฅผ ์๋์ฒ๋ผ ์์ ํ๋ค.
2. projects\mysite\common\urls.py ํ์ผ์ ์๋์ ๊ฐ์ ๋งคํ ๊ท์น ์ถ๊ฐ <-- navbar.html ํ์ผ์์ ํ ํ๋ฆฟ ํ๊ทธ๋ก {% url 'common:login' %}๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ
+ ๋ก๊ทธ์ธ ๋ทฐ๋ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ ์์ ์ฝ๋์ฒ๋ผ 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 ํ์ผ์ ์๋์ ๊ฐ์ด ์์
+ registration ๋๋ ํฐ๋ฆฌ๊ฐ ์๋ common ๋๋ ํฐ๋ฆฌ์์ login.html ํ์ผ์ ์ฐธ์กฐํ๊ฒ ์ค์ ํจ <-- ๋ก๊ทธ์ธ์ common ์ฑ์ ๊ตฌํํ ๊ฒ์ด๋ฏ๋ก ์์ ์ค๋ฅ ๋ฉ์์ง์์ ํ์ํ ๊ฒ์ฒ๋ผ registration ๋๋ ํฐ๋ฆฌ์ ํ ํ๋ฆฟ ํ์ผ์ ์์ฑํ๊ธฐ๋ณด๋ค๋ common ๋๋ ํฐ๋ฆฌ์ ํ ํ๋ฆฟ์ ์์ฑํ๋ ๊ฒ์ด ๋ ๋์
5. ๋ค์ http:/localhost:8000/pybo/ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๊ณ ๋ก๊ทธ์ธ ๋งํฌ ํด๋ฆญ --> ๋ค๋ฅธ ์ค๋ฅ ๋ฉ์ธ์ง & ์ฐฝ ์ถ๋ ฅ
6. 5๋ฒ์ ์ค๋ฅ ํด๊ฒฐ์ ์ํด common/login.html ํ์ผ์ ์์ฑํ๊ธฐ ์ํ common ํ ํ๋ฆฟ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ
7. common ํ ํ๋ฆฟ ๋๋ ํฐ๋ฆฌ์ login.html ํ ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ด ์๋ก ์์ฑ
+ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ์ ์์ด๋๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ ํ ํ๋ฆฟ
+ django.contrib.auth ์ฑ์ด ์๊ตฌํ๋ ํ๋ ํ์ํญ๋ชฉ
--> ๋ก๊ทธ์ธ์ ์ฐ์ด๋ ์ฌ์ฉ์ ์์ด๋(์ฌ์ฉ์๋ช )๋ฅผ ์๋ฏธํ๋ ํญ๋ชฉ username, ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ฏธํ๋ password ํญ๋ชฉ
8. {% csrf_token %} ๋ฐ๋ก ๋ฐ์ include ํ๊ทธ๋ก ํฌํจ๋ 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 ์ถ๊ฐ
+ / ํ์ด์ง --> ๊ธฐ๋ณธ URL์ธ http://localhost:8000/ ํ์ด์ง
4. ๋ค์ http://localhost:8000/ ํ์ด์ง ์์ฒญ ํ ๋ก๊ทธ์ธ ์ํ --> /๋ฅผ ์๋ฏธํ๋ http://localhost:8000/ ํ์ด์ง์ ๋ํ URL ๋งคํ ๊ท์น์ ์์ฑํ์ง ์์๊ธฐ์ ์๋ฌ ๋ฐ์
5. 4๋ฒ์ ์ค๋ฅ๋ฅผ ์์ ํ๊ธฐ ์ํด C:\projects\mysite\config\urls.py ํ์ผ์ / ํ์ด์ง์ ๋์ํ๋ URL ๋งคํ ๊ท์น ์ถ๊ฐ
+ / ํ์ด์ง ์์ฒญ ์ path('', views.index, name='index')๊ฐ ์๋ํ์ฌ pybo/views.py ํ์ผ์ index ํจ์๊ฐ ์คํ๋๊ฒ ์ค์ ํจ
# ๋ก๊ทธ์์
1. http://localhost:8000/ ํ์ด์ง ์์ฒญ --> ๋ก๊ทธ์ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์์๋ ๋ก๊ทธ์์์ด ์๋ ๋ก๊ทธ์ธ ๋ฒํผ์ด ๋ณด์
2. projects\mysite\templates\navbar.html ํ์ผ์์ ๋ก๊ทธ์ธ ๋งํฌ ๋ถ๋ถ์ ์๋์ ๊ฐ์ด ์์
+ << 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 ํ์ผ์ ์ถ๊ฐ
4. ๋ก๊ทธ์์ ์ ๋ฆฌ๋ค์ด๋ ํธํ ์์น๋ projects\mysite\config\settings.py ํ์ผ์ ์ถ๊ฐ
+ ๋ก๊ทธ์์ ์ / ํ์ด์ง๋ก ์ด๋ํ๊ธฐ ์ํด 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 |