18. ๋ชจ๋ธ ๋ณ๊ฒฝ + Question, Answer ์์ฑ ์ถ๊ฐ + author ์ ์ฅ + ๋ก๊ทธ์ธ์ด ํ์ํ ํจ์ + next ์ disable
# Question ๋ชจ๋ธ๊ณผ author ์์ฑ
- projects\mysite\pybo\models.py ํ์ผ์ ์ด๊ณ Question ๋ชจ๋ธ์ author ์์ฑ์ ์ถ๊ฐ
+ Line 6์์ author ํ๋๋ User ๋ชจ๋ธ์ ForeignKey ๋ก ์ ์ฉ ํ ์ ์ธ
+ User ๋ชจ๋ธ --> django.contrib.auth ์ฑ์ด ์ ๊ณตํ๋ ์ฌ์ฉ์ ๋ชจ๋ธ์ผ๋ก, ํ์ ๊ฐ์ ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฌ์ฉ
+ Line 6์ on_delete=models.CASCADE --> ๊ณ์ ์ญ์ ์ ๊ณ์ ์ด ์์ฑํ ์ง๋ฌธ ๋ชจ๋ ์ญ์
+ ์ฃผ์!
๋ชจ๋ธ์ ๋ณ๊ฒฝํ ํ์๋ ๊ผญ ๋ช ๋ น ํ๋กฌํฌํธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์์ ์ ๊ฑฐ์ณ์ผ ํจ!
1. ๋ช ๋ น ํ๋กฌํฌํธ์ mysite ์ ๋ ฅ
2. python manage.py makemigrations ์ ๋ ฅ --> ์ต์ ์ ํ์์ 1 ์ ๋ ฅ
+ ๋์๊ฒ ๊ธฐ์กด์ ์ ์ฅ๋์ด์๋ Question ๋ชจ๋ธ ๋ฐ์ดํฐ์ author์ ์ด๋ค ๊ฐ์ ๋ฃ์ด(์ ์ฅํด์ผ)์ผ ํ๋์ง ๋ฌป๋ ์ฅ๊ณ
3. >>> ํ๋กฌํฌํธ๊ฐ ๋ค์ ๋์ค๋ฉด alim ๊ณ์ ์ id๊ฐ์ธ 1 ์ ๋ ฅ
+ ๊ณ์ ์ ํ๋ ์์ฑํ ๋๋ง๋ค id๋ 1์ฉ ์ฆ๊ฐํจ. ๋น์ฐํ alim ๊ณ์ ์ด ์ ์ผ ๋จผ์ ์๊ฒผ์ผ๋ id๊ฐ๋ 1์
4. python manage.py migrate ๋ฅผ ์ ๋ ฅํ์ฌ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ
# Answer ๋ชจ๋ธ๊ณผ author ์์ฑ
- projects/mysite/pybo/models.py ํ์ผ์ ์ด์ด Answer ๋ชจ๋ธ์ author ์์ฑ ์ถ๊ฐ
+ ์ฃผ์!
์ด๋ฒ์๋ ๋ชจ๋ธ์ ๋ณ๊ฒฝํ์ผ๋ ๊ผญ ๋ช ๋ น ํ๋กฌํฌํธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์์ ์ ๊ฑฐ์ณ์ผ ํจ!
# author ์ ์ฅ
- ์ง๋ฌธ๊ณผ ๋ต๋ณ์ด ์ ์ฅ๋ ๋ author(๊ธ์ด์ด)์ ์ ๋ณด๋ ํจ๊ป ์ ์ฅํ๊ธฐ ์ํด projects\mysite\pybo\views.py ํ์ผ์ answer_create ํจ์๋ฅผ ์๋์ฒ๋ผ ์์
+ << Line 27 >>
--> answer.author = request.user
: author ์์ฑ์ ํ์ฌ ๋ก๊ทธ์ธํด์๋ ๊ณ์ ์ ์ฅ
--> request.user
: ํ์ฌ ๋ก๊ทธ์ธํด ์๋ ๊ณ์ ์ User ๋ชจ๋ธ ๊ฐ์ฒด
+ << Line 42 >>
--> question.author = request.user
: author ์์ฑ์ ํ์ฌ ๋ก๊ทธ์ธํด์๋ ๊ณ์ ์ ์ฅ
# ๋ก๊ทธ์ธ์ด ํ์ํ ํจ์
1. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถ --> ๋ก๊ทธ์์ ์ํ์์ ์ง๋ฌธ์ด๋ ๋ต๋ณ ๋ฑ๋ก ์ ์๋์ ๊ฐ์ Value ์๋ฌ๊ฐ ๋ํ๋จ
+ request.user๊ฐ User ๊ฐ์ฒด๊ฐ ์๋ AnonymousUser ๊ฐ์ฒด๋ผ์ ์๋ฌ ๋ฐ์
2. ์์ ์๋ฌ ํด๊ฒฐ์ ์ํด projects\mysite\pybo\views.py ํ์ผ์ ์ด์ด request.user ์ ์ฌ์ฉํ๋ ํจ์๊ฐ @login_required ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๋๋ก ์์
+ @login_required ์ด๋ ธํ ์ด์
: answer_create, question_create ํจ์๋ ํจ์๋ด์์ request.user๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ์ด ํ์ํ ํจ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ
: login_url='common:login' ์ฒ๋ผ ๋ก๊ทธ์ธ URL ์ง์ ๊ฐ๋ฅ
+ << Line 22, 39 >>
: ๋ก๊ทธ์์ ์ํ์์ @login_required ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ํจ์๊ฐ ํธ์ถ๋ ๊ฒฝ์ฐ(=๋ก๊ทธ์ธ๋์ง ์์ ์ํ์์ ์ง๋ฌธ์ด๋ ๋ต๋ณ ์์ฑ์ ์๋ํ ๊ฒฝ์ฐ) ์๋์ผ๋ก ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋
3. ๋ค์ http://localhost:8000/pybo/ ํ์ด์ง ํธ์ถ ํ ๋น๋ก๊ทธ์ธ ์ํ์์ ์ง๋ฌธ ๋ฐ ๋ต๋ณ ์์ฑํด๋ณด๊ธฐ --> ์๋์ผ๋ก ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋๋จ์ ํ์ธ
# next ํ๋ผ๋ฏธํฐ
1. ๋ก๊ทธ์์ ์ํ์์ ์ง๋ฌธ ๋ฑ๋ก์ ์๋ํ์ฌ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ ํ๋์์ ๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ URL์์ next ํ๋ผ๋ฏธํฐ ํ์ธ ๊ฐ๋ฅ
+ ๋ก๊ทธ์ธ ์ฑ๊ณต ํ next ํ๋ผ๋ฏธํฐ์ ์๋ URL๋ก ํ์ด์ง๋ฅผ ์ด๋ํ๊ฒ ๋ค๋ ์๋ฏธ์ด์ง๋ง, ํ์ฌ๋ ๊ทธ๋ ๊ฒ ์งํ๋์ง ์๊ณ ์์
2. ๋ก๊ทธ์ธ ํ next ํ๋ผ๋ฏธํฐ์ ์๋ URL๋ก ํ์ด์ง๋ฅผ ์ด๋ํ๊ธฐ ์ํด projects\mysite\templates\common\login.html ํ์ผ์ ์ด์ด ๋ก๊ทธ์ธ ํ ํ๋ฆฟ์ ์๋์ ๊ฐ์ด hidden ํ์ ์ next ํญ๋ชฉ ์ถ๊ฐ
# disabled
- ๋ต๋ณ ๋ฑ๋ก์ ํ์ฌ ์ง๋ฌธ ๋ฑ๋ก๊ณผ๋ ๋ฌ๋ฆฌ ๋ก๊ทธ์์ ์ํ์์๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ต๋ณ ์์ฑ ํ ์ ์ฅํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด, ์๋์ผ๋ก ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ฉด์ ์์ฑํ ๋ต๋ณ์ด ์ฌ๋ผ์ง๊ฒ ๋๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
--> ๋ก๊ทธ์์ ์ํ์์ ๋ต๋ณ ์์ฑ์ ๋ชปํ๊ฒ ํ๋ฉด ์์ฑํ ๊ธ์ด ์ฌ๋ผ์ง๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์
1. ๋ก๊ทธ์์ ์ํ์์์ ๋ต๋ณ ์์ฑ์ ๋ง๊ธฐ ์ํด projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์๋์ฒ๋ผ ์์
+ << Line 46 >>
: ๋ก๊ทธ์ธ ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ textarea ํ๊ทธ์ disabled ์์ฑ์ ์ ์ฉํ์ฌ ์ ๋ ฅ์ ๋ชปํ๊ฒ ์ค์
: {% if not user.is_authenticated %} ํ๊ทธ --> ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ ์ํ์ธ์ง ์ฌ๋ถ ํ์ธ
2. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถํ ๋ค ๋ก๊ทธ์์ ์ํ์์ ๋ต๋ณ ์์ฑ ์๋ --> ์๋ ์ฌ์ง์์์ฒ๋ผ ๋ต๋ณ ๋ด์ฉ์ ์ฐ๋ ์นธ์ด ํ์์ด ๋์ด ์์ฑ ๋ถ๊ฐ
'โ๏ธ Python Programming > Frameworks' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
< django - 20 > (0) | 2022.08.17 |
---|---|
< django - 19 > (0) | 2022.08.15 |
< django - 17 > (0) | 2022.08.07 |
< django - 16 > (0) | 2022.08.06 |
< django - 15 > (0) | 2022.08.06 |