728x90
๋ฐ˜์‘ํ˜•
[DRF] ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” URL ๋งŒ๋“ค๊ธฐ

localhost:8000/question/1 ์ด๋ ‡๊ฒŒ ์ƒ๊ธด URL์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด urlpattern์„ ์•„๋ž˜์ฒ˜๋Ÿผ ์ถ”๊ฐ€ํ•˜๊ณ  (์ฐธ๊ณ ๋กœ ์•ฑ์ด๋ฆ„ question์ž…๋‹ˆ๋‹ค) APIView๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?!?! ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด๋Ÿฐ url์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ด๋‹ค!! localhost:8000/family_question/answer?question_id=1 urlํŒจํ„ด์€ ๊ธฐ์กด์ฒ˜๋Ÿผ ์œ ์ง€ํ•˜๊ณ  (์ฐธ๊ณ ๋กœ ์Šค์ƒท์˜ ์•ฑ์ด๋ฆ„ family_question์ž…๋‹ˆ๋‹ค) APIView์—์„œ request.GET[''ํ‚ค๊ฐ’'] ์œผ๋กœ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์˜ value๋ฅผ ๊บผ๋‚ด์˜ค๋ฉด ๋œ๋‹ค. ์ž˜๋จ โ˜บ๏ธ [์ถ”๊ฐ€] ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ํŠน์ • ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์ด ์žˆ๋Š”์ง€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์—†์œผ๋ฉด ๋” ์ด์ƒ ์ง„ํ–‰์•ˆํ•˜๊ณ  ์—๋Ÿฌ๋ณด๋‚ด์ฃผ๋„๋ก ์ฒ˜๋ฆฌ..

๐Ÿ/DRF 2020. 10. 6. 00:56
[DRF] ์žฅ๊ณ  API ๋งŒ๋“ค๋•Œ, ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์ •์ฑ…์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ?

API ๋งŒ๋“ค๋•Œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์ •์ฑ…์„ ์–ด๋–ป๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹์„๊นŒ?! ๋ฅผ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค. (์žฅ๊ณ ๋กœ API ๊ฐœ๋ฐœ + ํ”Œ๋Ÿฌํ„ฐ๋กœ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์„ ๋™์‹œ์— ํ•˜๊ณ  ์žˆ์–ด๊ฐ€์ง€๊ตฌ ์ด ์ •์ฑ…์— ๋”ฐ๋ผ ํด๋ผ๋„ ๊ฐ™์ด ๋ฐ”๊ฟ”ํ•ด์„œ,,,๐Ÿ˜ถ) ๊ทธ๋ž˜์„œ ๊ณ ๋ฏผํ•œ ๊ฒƒ๋“ค์„ ๊ธฐ๋กํ•ด๋‘๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ํฌ๊ฒŒ๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์–ผ๋Ÿฟ์œผ๋กœ ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฒฐ์ •ํ•  ๊ฒƒ์ธ์ง€, ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฒฐ์ •ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ์š” ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํ›„๋ณด1) ์„œ๋ฒ„: api์—์„œ status code๋งŒ ๋‚ด๋ ค์ค€๋‹ค. ํด๋ผ: api์—์„œ ๋‚ด๋ ค์ฃผ๋Š” status code๋ฅผ ๋ณด๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ๋งคํ•‘ํ•œ๋‹ค. ํ›„๋ณด 2) ์„œ๋ฒ„: api์—์„œ status code ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ๋‚ด๋ ค์ค€๋‹ค. (์˜ˆ๋ฅผ๋“ค์–ด, header๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต..

๐Ÿ/DRF 2020. 10. 1. 01:18
[DRF] custom exceptionHandler์„ ๋งŒ๋“ค์–ด์„œ ์—๋Ÿฌ์‘๋‹ต์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜์ž

[1] Custom Exception Handling ์ด๋ž€ Custom exception handling ์ด๋ž€ API์˜ ์—๋Ÿฌ ์‘๋‹ต(error response) ์Šคํƒ€์ผ์„ ๋‚ด๋ง˜๋Œ€๋กœ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์žฅ๊ณ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์Šคํƒ€์ผ์˜ ์—๋Ÿฌ์‘๋‹ต์„ ๋‚ด๋ ค์ฃผ๋„๋ก ๋˜์–ด์žˆ๋Š”๋ฐ์š” { "detail": ์žฅ๊ณ ์˜ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ } ์—๋Ÿฌ ์‘๋‹ต์— status_code ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ ์—๋Ÿฌ ์‘๋‹ต ์Šคํƒ€์ผ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ณ  ์‹ถ์€ ๋‹ˆ์ฆˆ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค-!! ์ด๋Ÿด๋•Œ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด custom exception handler ๋งŒ๋“ค๊ธฐ ์ž…๋‹ˆ๋‹ค-!! [2] Custom Exception Handler ๋งŒ๋“ค๊ธฐ ์šฐ์„  ์ €๋Š” ํ”Œ์ ์— utils๋ผ๋Š” ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์—ˆ๊ตฌ์š” ๋ฌธ์„œ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•ด์„œ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. from rest..

๐Ÿ/DRF 2020. 9. 30. 17:28
[DRF] SerializerMethodField๋กœ ๋ชจ๋ธ์—์„œ ๋ณ€ํ˜•๋œ JSON์„ ๋‚ด๋ ค์ฃผ๊ธฐ

[DRF] ๋ชจ๋ธ๊ณผ ModelSerializer ๋งŒ๋“ค๊ธฐ ์—์„œ ๋ชจ๋ธ์„ JSON์œผ๋กœ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ModelSerializer๋ฅผ ์•Œ์•„๋ดค๋Š”๋ฐ์š”, ๋งŒ์•ฝ- ๋ชจ๋ธ์— ์—†๋Š” ํ•„๋“œ์ธ๋ฐ JSON์— ํŠน์ • ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋‚ด๋ ค์ฃผ๊ณ  ์‹ถ๊ฑฐ๋‚˜ - ๋ชจ๋ธ์— ์žˆ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์„œ JSON์œผ๋กœ ๋‚ด๋ ค์ฃผ๊ณ  ์‹ถ๊ฑฐ๋‚˜ (์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋ธ์—๋Š” fullName ํ•„๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ JSON์€ firtsName์œผ๋กœ ๋‚ด๋ ค์ฃผ๊ณ  ์‹ถ๋‹ค๋˜๊ฐ€) ํ• ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?! SerializerMethodField ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์—๋Š” method_name์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ์•ˆ์ง€์ •ํ•ด์ฃผ๋ฉด get_ํ•„๋“œ๋„ค์ž„ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ€๋ฅธ๋‹ค๋ผ๊ณ  ์ ํ˜€์žˆ๋„ค์š” ์˜ˆ๋ฅผ๋“ค์–ด ์ด๋ ‡๊ฒŒ ์ƒ๊ธด Profile ๋ชจ๋ธ์ด ์žˆ๋‹ค๊ณ  ํ• ๋•Œ JSON์œผ๋กœ nickname ํ•„๋“œ๋ฅผ ๋‚ด๋ ค์ฃผ๊ณ  test๋ผ๋Š” ..

๐Ÿ/DRF 2020. 9. 26. 16:06
[DRF] TokenAuthentication (์œ ์ €๋งˆ๋‹ค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์„œ ์œ ์ €๋ฅผ ์‹๋ณ„ํ•ด๋ณด์ž)

[1] DRF๊ฐ€ ์ง€์›ํ•ด์ฃผ๋Š” Authentication ์ข…๋ฅ˜ Django Rest Framework - Authentication ์„ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋„ค๊ฐ€์ง€์˜ Authentication์„ ์ง€์›ํ•ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Basic์€ username์ด๋ž‘ password๋กœ ์ธ์ฆํ•˜๋Š”๋ฐ ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์ ์ ˆํ•˜๋‹ค๋ผ๊ณ  ๋‚˜์™€์žˆ๊ณ  Token์€ token์œผ๋กœ ์ธ์ฆํ•˜๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ setup์— ์ ์ ˆํ•˜๋‹ค๊ณ  ํ•˜๊ณ  (์ €๋Š” ์ด๊ฑฐ ์“ฐ๊ฒ ์Šต๋‹ˆ๋‹ค..!) Session์€ AJAX client(๋ญ”์ง€๋ชจ๋ฆ„ใ… ใ… )์—๊ฒŒ ์ ์ ˆํ•˜๋‹ค๊ณ  ํ•˜๊ณ  Remote๋Š” ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์š”ใ… ใ…  [2] TokenAuthentication ์„ค์น˜ํ•˜๊ธฐ ์ด๋ฏธ rest_framework ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ–ˆ์œผ๋‹ˆ๊นŒ settigs.py์— ๊ฐ€์„œ ์•ฑ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ•ด์ค..

๐Ÿ/DRF 2020. 9. 21. 20:21
[Heroku] Heroku๋กœ ์žฅ๊ณ  API ๋ฐฐํฌํ•˜๊ธฐ

[1] Heroku์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๋“ค์–ด๊ฐ€์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค. pip install dj-database-url psycopg2-binary gunicorn whitenoise dj-database-url๊ณผ psycopg2-binary์€ ํ—ค๋กœ์ฟ ์—์„œ ์‚ฌ์šฉํ•˜๋Š” DB์ธ postgresql์„ ์œ„ํ•œ ํŒจํ‚ค์ง€, gunicorn์€ ๋ฐฐํฌํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€, whitenoise๋Š” ์ •์ ํŒŒ์ผ์˜ ์‚ฌ์šฉ์„ ๋•๋Š” ๋ฏธ๋“ค์›จ์–ด ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. [2] requirements ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ ์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ requirements ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. (ํ”Œ์ ์—์„œ ์“ฐ๋Š” ํŒจํ‚ค์ง€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‹ด๊ธด ํŒŒ์ผ์ด์—์š”-!) pip freeze > requirements.txt ํ”„๋กœ์ ํŠธ์— ๋ณด๋ฉด ํ•ด๋‹น ํŒŒ์ผ์ด ์ƒ๊ฒจ์žˆ๋‹ต๋‹ˆ..

๐Ÿ/DRF 2020. 9. 15. 23:10
[PythonAnywhere] ์žฅ๊ณ  admin ํŽ˜์ด์ง€ CSS๊ฐ€ ์•ˆ๋จน์„๋•Œ

[1] ๋ฌธ์ œ pythonanywhere ๋ฐฐํฌ ํ›„, admin์œผ๋กœ ์ ‘์†ํ•˜๋ฉด ํ™”๋ฉด์ด ์ด๋ ‡๊ฒŒ ๋‚˜์˜จ๋‹ค. ์›๋ž˜ admin ํŽ˜์ด์ง€๊ฐ€ ์ด๋ ‡๊ฒŒ ๋‚˜์™€์•ผํ•˜๋Š”๋ฐ CSS๊ฐ€ ์•ˆ๋จน์—ˆ๋‹ค. [2] ์›์ธ ํฌ๋กฌ > ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉด,,์ฝ˜์†”์— ์‹œ๋ป˜๊ฑด ์—๋Ÿฌ๋“ค์ด ๋œจ๊ณ  ์žˆ๋‹ค. ๊ทผ๋ฐ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—๋Š” static ์ด๋ผ๋Š” ํด๋”๊ฐ€ ์—†๋Š”๋ฐ ์—ฌ๊ธฐ์„œ cssํŒŒ์ผ์„ ์ฐพ์œผ๋ ค๊ณ  ํ•˜๋Š” ์ ์„ ์œ ์˜ํ•ด์„œ ๋ด์•ผํ•œ๋‹ค...!! ์žฅ๊ณ ์˜ static files ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ๊ฐœ๋ฐœํ™˜๊ฒฝ(settings.py์˜ DEBUG๋ฅผ True๋กœ ํ•ด๋†จ์„๋•Œ) ์—์„œ๋งŒ์ž๋™์œผ๋กœ static files (static files๋Š” CSS, JavaScript, Images๋ฅผ ๋งํ•จ) ๋ฅผ ์ฐพ๊ฒŒ ํ•ด์ค€ ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋กœ์ปฌ ์„œ๋ฒ„๋กœ ๋Œ๋ฆด๋•Œ๋„DEBUG = False ๋กœ ์„ค์ •ํ•˜๊ณ  admin ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด C..

๐Ÿ/DRF 2020. 9. 13. 06:24
๊ณต์ง€์‚ฌํ•ญ
Total
330,641
Today
290
Yesterday
358
๋งํฌ
«   2021/09   »
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
๊ธ€ ๋ณด๊ด€ํ•จ