19. ๊ธ์ด์ด ํ์์ ์ง๋ฌธ ๋ชฉ๋ก + ์ง๋ฌธ ์์ธ + ๊ธ, ์ง๋ฌธ์ ์์ ๋ฐ ์ญ์ + ๊ธ, ์ง๋ฌธ ์์ ์ผ์ ํ์ + ์ค๋ฅ ํ์ + ์๋ฐ์คํฌ๋ฆฝํธ ๋ธ๋ก
# ๊ธ์ด์ด ํ์์ ์ง๋ฌธ ๋ชฉ๋ก
1. projects\mysite\templates\pybo\question_list.html ํ์ผ์ ์ด๊ณ ํ ์ด๋ธ ํค๋์ ๊ธ์ด์ด ํญ๋ชฉ ์ถ๊ฐ
+ Line 10์ <th> ๊ธ์ด์ด </th> ํญ๋ชฉ ์ถ๊ฐ
+ Line 7์ tr ์๋ฆฌ๋จผํธ์ text-center ํด๋์ค๋ฅผ ์ถ๊ฐ --> th ์๋ฆฌ๋จผํธ๊ฐ ๊ฐ์ด๋ฐ์ ์์นํ๊ฒ ํ๊ธฐ ์ํจ
+ Line 9 ์ ์ ๋ชฉ ๋์ด๊ฐ ์ ์ฒด์ 50%๊ฐ ๋๋๋ก ์ง์
2. projects\mysite\templates\pybo\question_list.html ํ์ผ์ ์ด์ด for ๋ฌธ์๋ ๊ธ์ด์ด ์ ์ฉ
+ << Line 27 >>
: <td>{{ question.user.username }}</td> ์ ๋ฃ์ด ์ง๋ฌธ์ ๊ธ์ด์ด ํ์
+ << Line 17 >>
: tr ์๋ฆฌ๋จผํธ์ text-center ํด๋์ค ์ถ๊ฐ --> ํ ์ด๋ธ ๋ด์ฉ์ด ๊ฐ์ด๋ฐ ์ ๋ ฌํ๋๋ก
+ << Line 21 >>
: ์ ๋ชฉ์ด ์ผ์ชฝ ์ ๋ ฌ์ด ๋๊ฒ text-start ํด๋์ค ์ถ๊ฐ
+ << Line 33 >>
: ํ ์ด๋ธ ํญ๋ชฉ ์๊ฐ 3 -> 4 ๊ฐ ๋์ด colspan ๋ํ 3 -> 4๋ก ๋ฐ๊ฟ
3. http://localhost:8000/pybo/ ํ์ด์ง ํธ์ถ --> ์ง๋ฌธ ๋ชฉ๋ก ํ๋ฉด์ ๊ธ์ด์ด ์ถ๊ฐ๋จ
# ์ง๋ฌธ ์์ธ์ ๊ธ์ด์ด
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์ง๋ฌธ ์์ธ ํ ํ๋ฆฟ์ ๊ธ์ด์ด ์ถ๊ฐ
+ ๊ธ์ด์ด์ ์์ฑ ์ผ์๊ฐ ํจ๊ป ๋ณด์ด๋๋ก ์์ ํจ
2. http://localhost:8000/pybo/ ํ์ด์ง ํธ์ถ --> ์ง๋ฌธ ์์ธ ํ๋ฉด์ ์์ฑ ์ผ์์ ๊ธ์ด์ด๊ฐ ํจ๊ป ํ์๋๋ค.
# ์์ ์ผ์
- ์ง๋ฌธ ๋ฐ ๋ต๋ณ์ ์์ ์๊ฐ์ ํ์ธํ ์ ์๊ฒ ํ๊ธฐ ์ํด projects\mysite\pybo\models.py ํ์ผ์ ์ด์ด Question, Answer ๋ชจ๋ธ์ ์์ ์ผ์ ์์ฑ์ธ modify_date ์์ฑ์ ์ถ๊ฐ
+ << Line 10, 21 >>
--> ์์ ์ ์งํํ ๊ฒฝ์ฐ์๋ง ์์ ์ผ์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๋ฏ๋ก ์๋์ ๊ฐ์ด ์ง์ ํ๊ณ , ์ด๋ค ์กฐ๊ฑด์ด๋ก๋ ๊ฐ์ ๊ฐ์ ๋น์๋ ์ ์๋๋ก ํจ
: null=True --> ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ modify_date ์นผ๋ผ์ null ํ์ฉ
: blank=True --> form.is_valid()๋ฅผ ํตํ ์ ๋ ฅ ๋ฐ์ดํฐ ๊ฒ์ฆ ์ ๊ฐ์ด ์์ด๋ ๋๋ค๋ ์๋ฏธ
+ ์ฃผ์!
์ด๋ฒ์๋ ๋ชจ๋ธ์ด ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก ๋ช ๋ น ํ๋กฌํฌํธ์์ makemigrations, migrate ๋ช ๋ น์ ์ํํด์ผ ํจ
# ์ง๋ฌธ ์์
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์ง๋ฌธ ์์ ๋ฒํผ ์ถ๊ฐ
+ << Line 15 >>
: {% if request.user == question.author %} --> ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ธ์ด์ด๊ฐ ๋์ผํ ์ฌ๋์ผ ๊ฒฝ์ฐ์๋ง ์์ ๋ฒํผ์ด ๋ณด์ด๊ฒ ์ค์
2. ์ ์ฌ์ง์ Line 16์์ {% url 'pybo:question_modify' question.id %} URL์ด ์ถ๊ฐ๋์์ผ๋ projects\mysite\pybo\urls.py ํ์ผ์ ์ด์ด ์๋์ ๊ฐ์ด URL ๋งคํ ๊ท์น ์ถ๊ฐ
3. projects\mysite\pybo\views.py ํ์ผ์ ์ด์ด views.question_modify ํจ์๋ฅผ ์๋์ฒ๋ผ ์์ฑ
+ Line 59์ queston_modify ํจ์
: ๋ก๊ทธ์ธ ์ํ์ธ ์ฌ์ฉ์(request.user)์ ์ง๋ฌธ ์์ฑ์(question.author)๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ --> "์์ ๊ถํ์ด ์์ต๋๋ค." ์ค๋ฅ ์ถ๋ ฅ
+ Line 60์ messages ๋ชจ๋
: ๋ํ๋ ์ค๋ฅ(non-field error)๋ฅผ ๋ฐ์์ํฌ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ชจ๋๋ก, ์ ์ฝ๋์์๋ "์์ ๊ถํ์ด ์์ต๋๋ค." ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด ์ฌ์ฉ
+ Line 70 GET ์์ฒญ์ ๊ฒฝ์ฐ
: ์ง๋ฌธ ์์ ํ๋ฉด์ ์กฐํ๋ ์ง๋ฌธ์ ์ ๋ชฉ, ๋ด์ฉ์ ๋ฐ์ํ๊ธฐ ์ํ ํผ. instance ๊ฐ์ question์ผ๋ก ์ง์ ํ์๊ธฐ์ ํผ์ ์์ฑ ๊ฐ์ด instance๊ฐ์ผ๋ก ์ฑ์์ง
+ Line 63 POST ์์ฒญ์ ๊ฒฝ์ฐ
: ์์ ๋ ๋ด์ฉ์ ๋ฐ์ํด์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์์ฑํ ํผ. instance๋ฅผ ๊ธฐ์ค์ผ๋ก QuestionForm์ ์์ฑํ์ง๋ง request.POST์ ๊ฐ์ผ๋ก ๋ฎ์ด์ฐ๋ผ๋ ์๋ฏธ๋ก, ์ง๋ฌธ ์์ ํ๋ฉด์์ ์ ๋ชฉ, ๋ด์ฉ์ ๋ณ๊ฒฝํ์ฌ POST ์์ฒญ์ ํ๊ฒ ๋๋ฉด ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด QuestionForm์ ์ ์ฅ๋๋ค.
+ Line 66 ์ ์ง๋ฌธ ์์ ์ผ์ ์ ์ฅ
: "์ง๋ฌธ ์์ ์ผ์ = ํ์ฌ ์ผ์" ๋ก ์ค์
4. messages ๋ชจ๋์ ์ํ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ํ์ํ๊ธฐ ์ํด projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์ง๋ฌธ ์์ธ ํ๋ฉด ์์ชฝ ๋ถ๋ถ์ ์ค๋ฅ ์์ญ ์ถ๊ฐ
5. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถ --> ์์ ๋ฒํผ์ด ์ ์์ฑ๋จ์ ํ์ธ ๊ฐ๋ฅ
# ์ง๋ฌธ ์ญ์
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์ง๋ฌธ ์ญ์ ๋ฒํผ ์ถ๊ฐ
+ << Line 26 >>
: <์ญ์ > ๋ฒํผ์ <์์ > ๋ฒํผ๊ณผ ๋ฌ๋ฆฌ href ์์ฑ๊ฐ์ javascript:void(0)๋ก ์ค์
+ << Line 27 >>
: data-uri ์์ฑ ์ถ๊ฐ --> ์ญ์ ๋ฅผ ์คํํ URL ์ ์ป๊ธฐ ์ํจ
: <์ญ์ > ๋ฒํผ์ด ๋๋ฆฌ๋ ์ด๋ฒคํธ๋ฅผ ํ์ธํ ์ ์๊ฒ class ์์ฑ์ "delete" ํญ๋ชฉ ์ถ๊ฐ
2. projects\mysite\templates\base.html ํ์ผ์ ์ด์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ </body> ํ๊ทธ ์์ ์ฝ์
+ base.html ์ ์์ํ๋ ํ ํ๋ฆฟ๋ค์์ content ๋ธ๋ก์ ๊ตฌํํ๊ฒ ํ๋ ๊ฒ์ฒ๋ผ script ๋ธ๋ก์ ๊ตฌํํ ์ ์๊ฒ ์ค์
--> ์ด์ base.html์ ์์ํ๋ ํ ํ๋ฆฟ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ์ ์์น๋ฅผ ์ ๊ฒฝ์ธ ํ์X, ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ๊ณง๋ฐ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ฑ์ด ๊ฐ๋ฅํจ
3. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด๊ณ question_detail.html ํ๋จ์ {% block script %}{% endblock %} ๋ธ๋ก ์ถ๊ฐ
+ {% block script %}๊ณผ {% endblock %} ์ฌ์ด์ ์ง๋ฌธ์ ์ญ์ ํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ฑ
4. projects\mysite\pybo\urls.py ํ์ผ์ ์ด์ด ์๋์ฒ๋ผ URL ๋งคํ ๊ท์น ์ถ๊ฐ --> ์์์ data-uri์ {% url 'pybo:question_delete' question.id %} URL์ด ์ถ๊ฐ๋์๊ธฐ ๋๋ฌธ
5. projects\mysite\pybo\views.py ํ์ผ์ ์ด๊ณ ์์์ ์ ์ํ๋ views.question_delete ํจ์๋ฅผ ์์ฑ
+ << Line 74 >>
: question_delete ํจ์๋ ๋ก๊ทธ์ธ์ ํ์๋ก ํ๋ฏ๋ก @login_required ์ ๋ํ ์ด์ ์ ์ฉ --> "๋ก๊ทธ์ธ ์ํ์ธ ์ฌ์ฉ์ = ๊ธ์ด์ด"์ธ ๊ฒฝ์ฐ์๋ง ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋๋ก ํจ
6. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถ --> ์ญ์ ๋ฒํผ์ด ๋ณด์ด๋ ๊ฒ์ ํ์ธ
# ๋ต๋ณ ์์
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด๊ณ ๋ต๋ณ ๋ชฉ๋ก์ด ์ถ๋ ฅ๋๋ ๋ถ๋ถ์ ๋ต๋ณ ์์ ๋ฒํผ์ ์ถ๊ฐ
2. ์ ์ฌ์ง์ Line 45 ์ {% url 'pybo:answer_modify' answer.id %}๊ฐ ์ถ๊ฐ๋์์ผ๋ projects\mysite\pybo\urls.py ํ์ผ์ ์ด์ด URL ๋งคํ ๊ท์น ์ถ๊ฐ
3. projects\mysite\pybo\views.py ํ์ผ์ ์ด๊ณ ์์์ ์ ์ํ views.answer_modify ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์์ฑ
4. ๋ต๋ณ ๋ด์ฉ์ ํ์ธํ๊ณ ์์ ํ ์ ์๊ฒ ํ๋ ํ ํ๋ฆฟ answer_form.html ํ์ผ์ ์๋ก ์์ฑํ๋ค.
5. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถ --> ๋ต๋ณ ์์ ๋ฒํผ์ด ์๊ธด ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
# ๋ต๋ณ ์ญ์
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด๊ณ ์ง๋ฌธ ์์ธ ํ๋ฉด์์ ๋ต๋ณ์ ์ญ์ ํ ์ ์๋ ๋ฒํผ์ ์ถ๊ฐ
+ << Line 47 >>
: <์ญ์ > ๋ฒํผ์ delete ํด๋์ค๋ฅผ ์ ์ฉ --> <์ญ์ > ๋ฒํผ ํด๋ฆญ ์ data-uri ์์ฑ์ ์ค์ ํ url ์คํ
2. ์ ์ฌ์ง์ Line 48์์ {% url 'pybo:answer_delete' answer.id %}์ด ์ถ๊ฐ๋์์ผ๋ projects\mysite\pybo\urls.py ํ์ผ์ ์ด์ด URL ๋งคํ ๊ท์น ์ถ๊ฐ
3. projects\mysite\pybo\views.py ํ์ผ์ ์ด์ด ์์์ ์ ์ํ views.answer_delete ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์์ฑ
4. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถ --> ๋ต๋ณ ์์ฑ์์ ๋ก๊ทธ์ธ ์ํ์ธ ์ฌ์ฉ์๊ฐ ๋์ผํ๋ค๋ฉด <์ญ์ > ๋ฒํผ์ด ๋ํ๋จ์ ํ์ธ ๊ฐ๋ฅ
# ์์ ์ผ์ ํ์
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์ง๋ฌธ ์์ธ ํ๋ฉด์์๋ ์์ ์ผ์๋ฅผ ํ์ธํ ์ ์๊ฒ ์ค์
2. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ํธ์ถ --> ์์ ๋ ์๊ฐ์ด ํ์๋๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
'โ๏ธ Python Programming > Frameworks' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
< django - 21 > (0) | 2022.08.22 |
---|---|
< django - 20 > (0) | 2022.08.17 |
< django - 18 > (0) | 2022.08.07 |
< django - 17 > (0) | 2022.08.07 |
< django - 16 > (0) | 2022.08.06 |