12. ํผ๊ณผ ์ง๋ฌธ ๋ฑ๋ก + URL ๋งคํ + ๋ทฐ ํจ์ + ํ ํ๋ฆฟ + GET๊ณผ POST
# ์ง๋ฌธ ๋ฑ๋ก๊ณผ URL ๋งคํ
1. projects\mysite\templates\pybo\question_list.html ํ์ผ์ ์ง๋ฌธ ๋ฑ๋กํ๊ธฐ ๋ฒํผ์ ๋ง๋ ๋ค.
+ <a href="..."> ๊ณผ ๊ฐ์ ๋งํฌ์ด์ง๋ง ๋ถํธ์คํธ๋ฉ์ btn btn-primary ํด๋์ค๋ฅผ ์ ์ฉํ๋ฉด ๋ฒํผ์ผ๋ก ๋ณด์ --> ๋ฒํผ ํด๋ฆญ ์ pybo:question_create ๋ณ์นญ์ ํด๋น๋๋ URL์ด ํธ์ถ
2. projects\mysite\pybo\urls.py ํ์ผ์ pybo:question_create ๋ณ์นญ์ ํด๋น๋๋ URL ๋งคํ ๊ท์น์ ์ถ๊ฐํ์ฌ views.question_create ํจ์๋ฅผ ํธ์ถํ๋๋ก ๋งคํ
# ํผ(Form)๊ณผ ๋ทฐ ํจ์
: ํ์ด์ง๊ฐ ์์ฒญ๋ ๋ ์ ๋ฌ๋๋ ํ๋ผ๋ฏธํฐ๋ค์ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํด๋์ค๋ก, ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋๋ฝ ์ฌ๋ถ ๋ฐ ํ๋ผ๋ฏธํฐ ํ์์ ์ ์ ์ฑ ์ฌ๋ถ ๋ฑ์ ๊ฒ์ฆํ๋๋ฐ ์ฐ์ธ๋ค.
- HTML ์๋ ์์ฑ ๊ธฐ๋ฅ๊ณผ ํผ์ ์ฐ๊ฒฐ๋์ด์๋ ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด ์๋ค.
1. projects\mysite\pybo\forms.py ํ์ผ์ QuestionForm์ ์๋์ ๊ฐ์ด ์๋ก ์์ฑํ๋ค.
+ QuestionForm์ ๋ชจ๋ธ ํผ(forms.ModelForm)์ ์์ํจ
+ ๋ชจ๋ธ ํผ : ๋ชจ๋ธ(Model)๊ณผ ์ฐ๊ฒฐ๋ ํผ์ผ๋ก ํผ์ ์ ์ฅํ๋ฉด ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ํผ์ผ๋ก, ์ด๋ ํด๋์ค์ธ Meta ํด๋์ค( ์ฌ์ฉํ ๋ชจ๋ธ๊ณผ ๋ชจ๋ธ์ ์์ฑ์ ์ ์ )๋ฅผ ๊ผญ ํ์๋ก ํ๋ค.
+ ์ฅ๊ณ ์ ํผ
์ผ๋ฐ ํผ | ๋ชจ๋ธ ํผ |
forms.Form | forms.ModelForm |
+ Line 8์์ QuestionForm์์ ์ฌ์ฉํ Question ๋ชจ๋ธ์ ์์ฑ์ ์ ์ํจ
2. projects\mysite\pybo\views.py ํ์ผ์ views.question_create ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ
+ question_create ํจ์๋ ์์์ ์์ฑํ QuestionForm์ ์ฌ์ฉ
+ Line 23 --> render ํจ์์ ์ ๋ฌํ {'form': form}์ ํ ํ๋ฆฟ์์ ์ง๋ฌธ ๋ฑ๋ก์ ์ฌ์ฉํ ํผ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋จ
# ํ ํ๋ฆฟ + GET๊ณผ POST
1. pybo/question_form.html ํ ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ
+ ํ ํ๋ฆฟ์์ ์ฌ์ฉํ {{ form.as_p }}์ form = question_create ํจ์์์ ์ ๋ฌํ QuestionForm์ ๊ฐ์ฒด
+ {{ form.as_p }}๋ ํผ์ ์ ์ํ subject, content ์์ฑ์ ํด๋นํ๋ HTML ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑ
+ ์ฌ๊ธฐ์๋ form ํ๊ทธ์ action ์์ฑ์ ์ง์ ํ์ง ์์์ --> form ํ๊ทธ์ action ์์ฑ์ ์ง์ ํ์ง ์์ผ๋ฉด ํ์ฌ ํ์ด์ง์ URL์ด ๋ํดํธ action์ผ๋ก ์ค์ ๋จ
2. http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ์์ฒญํ๋ค.
+ subject์ content ์ ๋ ฅ ์ฐฝ์ ๊ฐ์ ์ ๋ ฅํ๊ณ ์ ์ฅํ๊ธฐ๋ฅผ ๋๋ฌ๋ question_create ํจ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์์ง ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฐ ๋ฐ์์ด X
3. projects\mysite\pybo\views.py ํ์ผ์ question_create ํจ์๋ฅผ ์๋์ฒ๋ผ ์์
+ ๋์ผํ URL ์์ฒญ์ POST, GET ์์ฒญ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ
: ์ง๋ฌธ ๋ชฉ๋ก ํ๋ฉด์์ "์ง๋ฌธ ๋ฑ๋กํ๊ธฐ" ๋ฒํผ์ ํด๋ฆญํ ๊ฒฝ์ฐ
--> /pybo/question/create/ ํ์ด์ง๊ฐ GET ๋ฐฉ์์ผ๋ก ์์ฒญ( ๋งํฌ๋ฅผ ํตํด ํ์ด์ง๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ ๋ฐ๋์ GET ๋ฐฉ์์ด ์ฌ์ฉ๋๋ค. )
--> question_create ํจ์๊ฐ ์คํ --> request.method ๊ฐ์ด GET์ด ๋จ
--> if .. else .. ๊ตฌ๋ฌธ์์ else ๊ตฌ๋ฌธ์ ํ๊ฒ ๋์ด ์ง๋ฌธ ๋ฑ๋ก ํ๋ฉด ๋ ๋๋ง
: ์ง๋ฌธ ๋ฑ๋ก ํ๋ฉด์์ subject, content ํญ๋ชฉ์ ๊ฐ์ ๊ธฐ์ ํ๊ณ "์ ์ฅํ๊ธฐ" ๋ฒํผ์ ๋๋ฅธ ๊ฒฝ์ฐ
--> /pybo/question/create/ ํ์ด์ง๋ฅผ POST ๋ฐฉ์์ผ๋ก ์์ฒญ( form ํ๊ทธ์ action ์์ฑ์ด ์ง์ ๋์ง ์์ผ๋ฉด ํ์ฌ ํ์ด์ง๊ฐ ๋ํดํธ action์ผ๋ก ์ค์ ๋๊ธฐ ๋๋ฌธ )
--> question_create ํจ์๊ฐ ์คํ --> request.method ๊ฐ์ POST๊ฐ ๋์ด ๋ค์ ์ฝ๋ ๋ธ๋ก ์คํ
+ GET ๋ฐฉ์ : form = QuestionForm() ์ฒ๋ผ QuestionForm์ ์ธ์ ์์ด ์์ฑ
VS
POST ๋ฐฉ์ : form = QuestionForm(request.POST) ์ฒ๋ผ request.POST๋ฅผ ์ธ์๋ก ์์ฑ
--> ์ด ๊ฒฝ์ฐ request.POST์ ๋ด๊ธด subject, content ๊ฐ์ด QuestionForm์ subject, content ์์ฑ์ ์๋์ผ๋ก ์ ์ฅ๋์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋จ. ์ด๋ request.POST์๋ ํ๋ฉด์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ๋ค์ด ์์.
+ Line 24 => ํผ์ด ์ ํจํ ๊ฒฝ์ฐ์๋
: form.is_valid()๋ form์ด ์ ํจํ์ง๋ฅผ ๊ฒ์ฌํจ. form ์ด ์ ํจํ ๊ฒฝ์ฐ if form.is_valid(): ์ดํ์ ๋ฌธ์ฅ์ด ์ํ๋์ด ์ง๋ฌธ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋จ
+ Line 25 => ์์๋ก ์ ์ฅํ์ฌ question ๊ฐ์ฒด๋ฅผ ๋ฆฌํด๋ฐ๋๋ค. ( ์์ง ์ค์ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ง ์์. )
: form.save(commit=False)๋ form์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ก Question ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ฝ๋๋ก, commit=False๋ ์์ ์ ์ฅ์ ์๋ฏธํจ.
+ Line 26 => ์ค์ ๋ก ์ ์ฅํ๊ธฐ ์ํด ์์ฑ ์ผ์๋ฅผ ์ค์
: QuestionForm์๋ ํ์ฌ subject, content ์์ฑ๋ง ์ ์๋์ด ์๊ธฐ์ ์์ฑ ์ผ์๊ฐ์ ๋ฐ๋ก ์ค์ ํด ์ค์ผ ํจ. ( create_date ์์ฑ์ ๋ฐ์ดํฐ ์ ์ฅ ์์ ์ ์์ฑํด์ผ ํ๋ ๊ฐ์ด๋ฏ๋ก QuestionForm์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ์ง ์์ )
+ Line 27 => ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ ์ฅ
4. ๋ค์ http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ์์ฒญ --> ์ง๋ฌธ ๋ฑ๋กํ๊ธฐ --> ์ง๋ฌธ ๋ฑ๋ก ํ๋ฉด์ ๋ด์ฉ ๋ฐ ์ ๋ชฉ ์ ๋ ฅ --> ์ ์ฅํ๊ธฐ ํด๋ฆญ
'โ๏ธ Python Programming > Frameworks' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
< django - 14 > (0) | 2022.08.05 |
---|---|
< django - 13 > (0) | 2022.08.05 |
< django - 11 > (0) | 2022.08.04 |
< django - 10 > (0) | 2022.08.04 |
< django - 9 > (0) | 2022.08.03 |