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

< django - 18 >

by A Lim Han 2022. 8. 7.

18. ๋ชจ๋ธ ๋ณ€๊ฒฝ + Question, Answer ์†์„ฑ ์ถ”๊ฐ€ + author ์ €์žฅ + ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ํ•จ์ˆ˜ + next ์™€ disable

 

 

# Question ๋ชจ๋ธ๊ณผ author ์†์„ฑ

-  projects\mysite\pybo\models.py ํŒŒ์ผ์„ ์—ด๊ณ  Question ๋ชจ๋ธ์— author ์†์„ฑ์„ ์ถ”๊ฐ€

Line 2, 6 ์ถ”๊ฐ€

+ 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 ์ž…๋ ฅ

๊ธฐ์กด ๊ฒŒ์‹œ๋ฌผ์˜ author ์• ๋Š” alim ๊ณ„์ •์ด ๋“ฑ๋ก๋จ

+ ๊ณ„์ •์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค id๋Š” 1์”ฉ ์ฆ๊ฐ€ํ•จ. ๋‹น์—ฐํžˆ alim ๊ณ„์ •์ด ์ œ์ผ ๋จผ์ € ์ƒ๊ฒผ์œผ๋‹ˆ id๊ฐ’๋„ 1์ž„

 

4. python manage.py migrate ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ

 

 

 

 

# Answer ๋ชจ๋ธ๊ณผ author ์†์„ฑ

- projects/mysite/pybo/models.py ํŒŒ์ผ์„ ์—ด์–ด Answer ๋ชจ๋ธ์— author ์†์„ฑ ์ถ”๊ฐ€

Line 16 ์ถ”๊ฐ€

 

+ ์ฃผ์˜!

์ด๋ฒˆ์—๋„ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ–ˆ์œผ๋‹ˆ ๊ผญ ๋ช…๋ น ํ”„๋กฌํฌํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๊ฑฐ์ณ์•ผ ํ•จ!

 

 

 

 

# author ์ €์žฅ

- ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์ด ์ €์žฅ๋  ๋•Œ author(๊ธ€์“ด์ด)์˜ ์ •๋ณด๋„ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด projects\mysite\pybo\views.py ํŒŒ์ผ์˜ answer_create ํ•จ์ˆ˜๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆ˜์ •

Line 27, 42 ์ถ”๊ฐ€


+ << 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 ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

Line 7, 22, 39 ์ถ”๊ฐ€

+ @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 ํ•ญ๋ชฉ ์ถ”๊ฐ€

Line 6 ์ถ”๊ฐ€

 

 

 

 

# disabled

- ๋‹ต๋ณ€ ๋“ฑ๋ก์€ ํ˜„์žฌ ์งˆ๋ฌธ ๋“ฑ๋ก๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ์—์„œ๋„ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ต๋ณ€ ์ž‘์„ฑ ํ›„ ์ €์žฅํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์ž๋™์œผ๋กœ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ๋‹ต๋ณ€์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. 

-->  ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ์—์„œ ๋‹ต๋ณ€ ์ž‘์„ฑ์„ ๋ชปํ•˜๊ฒŒ ํ•˜๋ฉด ์ž‘์„ฑํ•œ ๊ธ€์ด ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

 

1. ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ์—์„œ์˜ ๋‹ต๋ณ€ ์ž‘์„ฑ์„ ๋ง‰๊ธฐ ์œ„ํ•ด projects\mysite\templates\pybo\question_detail.html ํŒŒ์ผ์„ ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆ˜์ •

Line 46, 47 ์ถ”๊ฐ€

+ << 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