
localhost:8000/question/1 ์ด๋ ๊ฒ ์๊ธด URL์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด urlpattern์ ์๋์ฒ๋ผ ์ถ๊ฐํ๊ณ (์ฐธ๊ณ ๋ก ์ฑ์ด๋ฆ question์ ๋๋ค) APIView๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค. ๋ง์ฝ ์ฟผ๋ฆฌ์คํธ๋ง์ ๋ฐ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?!?! ๊ทธ๋ฌ๋๊น ์ด๋ฐ url์ ์ ๊ณตํ๊ณ ์ถ์ ๊ฒ์ด๋ค!! localhost:8000/family_question/answer?question_id=1 urlํจํด์ ๊ธฐ์กด์ฒ๋ผ ์ ์งํ๊ณ (์ฐธ๊ณ ๋ก ์ค์ท์ ์ฑ์ด๋ฆ family_question์ ๋๋ค) APIView์์ request.GET[''ํค๊ฐ'] ์ผ๋ก ์ฟผ๋ฆฌ์คํธ๋ง์ value๋ฅผ ๊บผ๋ด์ค๋ฉด ๋๋ค. ์๋จ โบ๏ธ [์ถ๊ฐ] ๊ทธ๋ฆฌ๊ณ ์ ๋ ํน์ ์ฟผ๋ฆฌ์คํธ๋ง์ด ์๋์ง๋ฅผ ๋ช ์์ ์ผ๋ก ํ์ธํ๊ณ ์์ผ๋ฉด ๋ ์ด์ ์งํ์ํ๊ณ ์๋ฌ๋ณด๋ด์ฃผ๋๋ก ์ฒ๋ฆฌ..

API ๋ง๋ค๋ ์๋ฌ ๋ฉ์ธ์ง ์ ์ฑ ์ ์ด๋ป๊ฒ ํด์ฃผ๋ ๊ฒ ์ข์๊น?! ๋ฅผ ๋ง์ด ๊ณ ๋ฏผํ์ต๋๋ค. (์ฅ๊ณ ๋ก API ๊ฐ๋ฐ + ํ๋ฌํฐ๋ก ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ ๋์์ ํ๊ณ ์์ด๊ฐ์ง๊ตฌ ์ด ์ ์ฑ ์ ๋ฐ๋ผ ํด๋ผ๋ ๊ฐ์ด ๋ฐ๊ฟํด์,,,๐ถ) ๊ทธ๋์ ๊ณ ๋ฏผํ ๊ฒ๋ค์ ๊ธฐ๋กํด๋๋ ค๊ณ ํฉ๋๋ค. ์ฐ์ ํฌ๊ฒ๋ณด๋ฉด ์ฌ์ฉ์๊ฐ ์ผ๋ฟ์ผ๋ก ๋ง๋๊ฒ ๋๋ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ์๋ฒ์์ ๊ฒฐ์ ํ ๊ฒ์ธ์ง, ํด๋ผ์ด์ธํธ์์ ๊ฒฐ์ ํ ๊ฒ์ธ์ง ์ ํด์ผํ๋ ๋ฌธ์ ์ธ๋ฐ์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์๊ฐํด๋ณด๋ฉด ํ๋ณด1) ์๋ฒ: api์์ status code๋ง ๋ด๋ ค์ค๋ค. ํด๋ผ: api์์ ๋ด๋ ค์ฃผ๋ status code๋ฅผ ๋ณด๊ณ ํด๋ผ์ด์ธํธ์์ ์๋ฌ๋ฉ์์ง๋ฅผ ๋งคํํ๋ค. ํ๋ณด 2) ์๋ฒ: api์์ status code ๋ฟ๋ง์๋๋ผ ๊ฐ๋ฐ์๊ฐ ์ดํดํ ์ ์๋ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ๋ด๋ ค์ค๋ค. (์๋ฅผ๋ค์ด, header๊ฐ์ด ์ฌ๋ฐ๋ฅด์ง ์์ต..

[1] Custom Exception Handling ์ด๋ Custom exception handling ์ด๋ API์ ์๋ฌ ์๋ต(error response) ์คํ์ผ์ ๋ด๋ง๋๋ก ํธ๋ค๋งํ ์ ์๋ ๊ฒ์ ๋งํฉ๋๋ค. ํ์ฌ ์ฅ๊ณ ๋ ์๋์ ๊ฐ์ ์คํ์ผ์ ์๋ฌ์๋ต์ ๋ด๋ ค์ฃผ๋๋ก ๋์ด์๋๋ฐ์ { "detail": ์ฅ๊ณ ์ ์๋ฌ๋ฉ์ธ์ง } ์๋ฌ ์๋ต์ status_code ํ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฑ ์๋ฌ ์๋ต ์คํ์ผ์ ์ปค์คํฐ๋ง์ด์งํ๊ณ ์ถ์ ๋์ฆ๊ฐ ์์ ์ ์์ต๋๋ค-!! ์ด๋ด๋ ์ทจํ ์ ์๋ ๋ฐฉ๋ฒ์ด custom exception handler ๋ง๋ค๊ธฐ ์ ๋๋ค-!! [2] Custom Exception Handler ๋ง๋ค๊ธฐ ์ฐ์ ์ ๋ ํ์ ์ utils๋ผ๋ ํ์ผ์ ํ๋ ๋ง๋ค์๊ตฌ์ ๋ฌธ์์ ์๋ ์ฝ๋๋ฅผ ๋ณต๋ถํด์ ๋ฃ์์ต๋๋ค. from rest..

[DRF] ๋ชจ๋ธ๊ณผ ModelSerializer ๋ง๋ค๊ธฐ ์์ ๋ชจ๋ธ์ JSON์ผ๋ก ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋๋ก ํด์ฃผ๋ ModelSerializer๋ฅผ ์์๋ดค๋๋ฐ์, ๋ง์ฝ- ๋ชจ๋ธ์ ์๋ ํ๋์ธ๋ฐ JSON์ ํน์ ํ๋๋ฅผ ์ถ๊ฐํด์ ๋ด๋ ค์ฃผ๊ณ ์ถ๊ฑฐ๋ - ๋ชจ๋ธ์ ์๋ ๊ฐ์ ๋ณ๊ฒฝํด์ JSON์ผ๋ก ๋ด๋ ค์ฃผ๊ณ ์ถ๊ฑฐ๋ (์๋ฅผ ๋ค์ด ๋ชจ๋ธ์๋ fullName ํ๋๊ฐ ์๋๋ฐ JSON์ firtsName์ผ๋ก ๋ด๋ ค์ฃผ๊ณ ์ถ๋ค๋๊ฐ) ํ ๋๋ ์ด๋ป๊ฒ ํด์ผํ ๊น์?! SerializerMethodField ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด ํ๋์๋ method_name์ ์ง์ ํด์ค ์ ์๋๋ฐ์, ์์ง์ ํด์ฃผ๋ฉด get_ํ๋๋ค์ ๋ฉ์๋๋ฅผ ๋ถ๋ฅธ๋ค๋ผ๊ณ ์ ํ์๋ค์ ์๋ฅผ๋ค์ด ์ด๋ ๊ฒ ์๊ธด Profile ๋ชจ๋ธ์ด ์๋ค๊ณ ํ ๋ JSON์ผ๋ก nickname ํ๋๋ฅผ ๋ด๋ ค์ฃผ๊ณ test๋ผ๋ ..

rest_framework์ ์๋ ๊ธฐ๋ณธ exception๊ณผ APIException์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. [1] Exception ์ฒ๋ฆฌํด์ผํ๋ ์ด์ ์ ์ SignupView๋ ์ด๋ ๊ฒ ๋์ด์๋๋ฐ์ ์๋ฌด exception๋ ์ฒ๋ฆฌ์ํด์ค ์ํ์ ๋๋ค. class SignupView(APIView): def post(self, request): unique_string = get_random_string(length=10) temporary_family_code = models.TemporaryFamilyCode(code=unique_string) user = User.objects.create_user(username=request.data['id'], password=request.data['password'..

[1] DRF๊ฐ ์ง์ํด์ฃผ๋ Authentication ์ข ๋ฅ Django Rest Framework - Authentication ์ ๋ณด๋ฉด ์ด๋ ๊ฒ ๋ค๊ฐ์ง์ Authentication์ ์ง์ํด์ฃผ๊ณ ์์ต๋๋ค. Basic์ username์ด๋ password๋ก ์ธ์ฆํ๋๋ฐ ํ ์คํธ์์๋ง ์ ์ ํ๋ค๋ผ๊ณ ๋์์๊ณ Token์ token์ผ๋ก ์ธ์ฆํ๋๋ฐ, ํด๋ผ์ด์ธํธ - ์๋ฒ setup์ ์ ์ ํ๋ค๊ณ ํ๊ณ (์ ๋ ์ด๊ฑฐ ์ฐ๊ฒ ์ต๋๋ค..!) Session์ AJAX client(๋ญ์ง๋ชจ๋ฆใ ใ )์๊ฒ ์ ์ ํ๋ค๊ณ ํ๊ณ Remote๋ ๋ฌด์จ ๋ง์ธ์ง ๋ชจ๋ฅด๊ฒ ์ด์ใ ใ [2] TokenAuthentication ์ค์นํ๊ธฐ ์ด๋ฏธ rest_framework ํจํค์ง๋ฅผ ์ค์นํ์ผ๋๊น settigs.py์ ๊ฐ์ ์ฑ๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ํด์ค..

[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 ํ๋ก์ ํธ์ ๋ณด๋ฉด ํด๋น ํ์ผ์ด ์๊ฒจ์๋ต๋..

์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก DB๋ฅผ ๊ตฌ์ฑํ๊ณ API๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ERD๋ฅผ ๊ทธ๋ ค์ฃผ๊ฒ ์ต๋๋ค. ์๋ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ ๊ฒ์-! http://aquerytool.com/ AQueryTool - AQuery.Web {{source.erd_info.erd_name + '(' + source.erd_info.db_type + ')'}} aquerytool.com ๋ฐ๋ชจํ์ด์ง์ ๋ค์ด๊ฐ์ (aquerytool.com/?demo=y) ์์ ๋ฅผ ๋ณด๊ณ ์ด๊ฒ์ referenceํด์ ERD๋ฅผ ๊ทธ๋ ค์ค๊ฒ์-!! (๋ํ๊ต 3ํ๋ ๋ ํ๋๊ฑด๋ฐ,,,๋ค ๊น๋จน,,,) aquerytool.com/help/index/ ์ฌ๊ธฐ help์๋ ์น์ ํ ์ค๋ช ์ด ์์ต๋๋ค (๐ฅบ) [1] AQueryTool ์ ์จ๋ณด์ ์ฐ์ ๋ก๊ทธ์ธ์ ํด์ฃผ์๊ณ ์ปจํธ๋กค + ๋ง์ฐ์ค ํด๋ฆญ ํด์ ํ ์ด๋ธ๋ง..

[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] get ์์ฒญ๋ฐ๋ API ๋ง๋ค๊ธฐ (2) ์์ ๋ง๋ API๋ฅผ ๋ฐฐํฌํด๋ณด๊ฒ ์ต๋๋ค..! pythonanywhere ์ ๋ค์ด๊ฐ์ Beginner account๋ฅผ ๋ง๋ค์ด์ค๋๋ค (๋ฌด๋ฃ โฅ๏ธ) (Beginner ๊ณ์ ์ผ๋ก ๋ฐฐํฌํ ๊ฑด 3๊ฐ์๋ง ์ ์๊ฐ๋ฅํฉ๋๋ค) Deploying an existing Django project on PythonAnywhere ๋ฌธ์๋ฅผ ๋ฐ๋ผํด๋ด ์๋ค-!! [1] Uploading your code to PythonAnywhere ๊ณ์ ๋ง๋ค๊ณ ๋ก๊ทธ์ธํ๋ฉด ์ด ํ๋ฉด์ด ๋์ค๋๋ฐ์ ์ฌ๊ธฐ์ Console ํญ์ ๋๋ฅด๊ณ bash๋ฅผ ๋๋ฌ์ฃผ์ธ์ ๊ทธ๋ฌ๋ฉด ์ด๋ฐ bash console์ด ๋จ๊ฒ ๋ฉ๋๋ค. git clone https://github.com/eunjin3786/onion_family_api ๊น์ ์ฌ๋ฆฐ ..
- Total
- 927,722
- Today
- 714
- Yesterday
- 1,520
- Flutter Text Gradient
- github actions
- ribs
- Django Firebase Cloud Messaging
- Flutter getter setter
- flutter deep link
- Flutter Spacer
- Sketch ๋๋ผ
- drf custom error
- Dart Factory
- Django FCM
- DRF APIException
- PencilKit
- ํ๋ฌํฐ ์ฑ๊ธํค
- Python Type Hint
- flutter build mode
- Flutter Clipboard
- Watch App for iOS App vs Watch App
- Flutter ๋ก๋ฉ
- cocoapod
- ํ๋ฌํฐ ์ผ๋ฟ
- ipad multitasking
- ์ฅ๊ณ URL querystring
- flutter dynamic link
- SerializerMethodField
- Django Heroku Scheduler
- ๊ตฌ๊ธ Geocoding API
- flutter ์ฑ ์ถ์
- METAL
- ์ฅ๊ณ Custom Management Command