๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

โญ Personal_Study/Vue23

drf-spectacular drf-spectacular swagger โœ” ์Šค์›จ๊ฑฐ(swagger)๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ REST ์›น ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„, ๋นŒ๋“œ, ๋ฌธ์„œํ™”, ์†Œ๋น„ํ•˜๋Š” ์ผ์„ ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋ ˆ์ž„์›Œํฌ โœ” ์ฆ‰, API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™” ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์–‘ํ•œ DRF API โœ” ์Šค์›จ๊ฑฐ(swagger)๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ -> drf-spectacular drf-spectacular โœ” Open API 3.0์„ ์ง€์›ํ•˜๋Š” DRF API OpenAPI ์ƒ์„ฑ๊ธฐ ์„ค์น˜ ๋ฐ ๋“ฑ๋ก $ pip install drf-spectacular $ pip freeze > requirements.txt # my_api/settings.py INSTALLED_APPS = [ 'drf_spectacular' ] ๊ธฐ๋ณธ ์„ค.. 2022. 11. 24.
DRF Auth with Vue DRF Auth with Vue vue server ์š”์ฒญ ์ •์ƒ ์ž‘๋™ ์—ฌ๋ถ€ ํ™•์ธ โœ” 401 status code โœ” ์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์ด๋ฏ€๋กœ ์กฐํšŒ ์š”์ฒญ์ด ๋ถˆ๊ฐ€๋Šฅ! SignUp Request SignUp Page views/SignUpView.vue // views/SignUpView.vue Sign Up Page username : password : password confirmation : โœ” Server์—์„œ ์ •์˜ํ•œ field๋ช… ํ™•์ธ username password1 password2 router/index.js // router/index.js import SignUpView from '@/views/SignUpView' Vue.use(VueRouter) const routes = [ ... { p.. 2022. 11. 23.
DFR Auth System DFR Auth System Authentication & Authorization Authentication - ์ธ์ฆ, ์ž…์ฆ โœ” ์ž์‹ ์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ–‰์œ„ โœ” ๋ชจ๋“  ๋ณด์•ˆ ํ”„๋กœ์„ธ์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„ โœ” ์ฆ‰, ๋‚ด๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ • โœ” 401 Unauthorized Authorizaion - ๊ถŒํ•œ ๋ถ€์—ฌ, ํ—ˆ๊ฐ€ โœ” ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ๋ฆฌ์†Œ์Šค ๋˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์—‘์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ณผ์ •(์ ˆ์ฐจ) โœ” ๋ณด์•ˆ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋„ˆํ•œ ๋ถ€์—ฌ๋Š” ํ•ญ์ƒ ์ธ์ฆ์ด ๋จผ์ € ํ•„์š”ํ•จ ์‚ฌ์šฉ์ž๋Š” ์กฐ์ง์— ๋Œ€ํ•œ ์—‘์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌ ๋ฐ›๊ธฐ ์ „์— ๋จผ์ € ์ž์‹ ์˜ ID๊ฐ€ ์ง„์งœ์ธ์ง€ ๋จผ์ € ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. โœ” ์„œ๋ฅ˜์˜ ๋“ฑ๊ธ‰, ์›น ํŽ˜์ด์ง€์—์„œ ๊ธ€์„ ์กฐํšŒ/์‚ญ์ œ/์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•, ์ œํ•œ๊ตฌ์—ญ(admin) ๋“ฑ๋“ฑ ์ธ์ฆ์ด ๋˜์—ˆ์–ด๋„ ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌ .. 2022. 11. 22.
Vue with DRF Vue with DRF Article Read ์‘๋‹ต ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํ™•์ธ โœ” dataArray์— ๊ฐ ๊ฒŒ์‹œ๊ธ€ ๊ฐ์ฒด โœ” ๊ฐ ๊ฒŒ์‹œ๊ธ€ ๊ฐ์ฒด๋Š” id, title, content๋กœ ๊ตฌ์„ฑ store/index.js ์ˆ˜์ • // store/index.js export default new Vuex.Store({ state: { articles: [], }, getters: { }, mutations: { GET_ARTICLES(state, articles) { state.articles=articles } }, actions: { getArticles(context) { axios({ method: 'get', url: `${API_URL}/api/v1/articles/` }) .then((res) => { // co.. 2022. 11. 21.
Cross - Origin Resource Sharing (CORS) Cross - Origin Resource Sharing (CORS) ๊ฐœ์š” โœ” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…(SOP)์— ์˜ํ•ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉ ์ œํ•œ SOP(Same - Origin Policy) โœ” ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ… โœ” ๋ถˆ๋Ÿฌ์˜จ ๋ฌธ์„œ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค์™€ ์‚ฌํ˜ธ ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๋ฐฉ์‹ โœ” ์ž ์žฌ์ ์œผ๋กœ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ค„์ธ๋‹ค. Origin - ์ถœ์ฒ˜ โœ” URL์˜ Protocol, Host, Port๋ฅผ ๋ชจ๋‘ ํฌํ•จํžˆ์—ฌ ์ถœ์ฒ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์˜ˆ์‹œ CORS - ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ  โœ” ์ถ”๊ฐ€ HTTP Header๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํŠน์ • ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€ํ˜€์•Ÿ๋„๋ก ๋ธŒ๋ผ.. 2022. 11. 20.
Vue with DRF: Server & Client Vue with DRF Server & Client Server โœ” ํด๋ผ์ด์–ธํŠธ์— ์ •๋ณด์™€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ โœ” ์„œ๋น„์Šค ์ „์ฒด๋ฅผ ์ œ๊ณต -> Django Web Service โœ” ์ •๋ณด๋ฅผ ์ œ๊ณต -> Django API Service โœ” DB์™€ ํ†ต์‹ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ๋‹ด๋‹น Client โœ” Server๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์— ์ ์ ˆํ•œ ์š”์ฒญ์„ ํ†ตํ•ด Server๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ ๋ฐ›์€ ์‘๋‹ต์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ์‹œ์Šคํ…œ โœ” ์‘๋‹ต๋ฐ›์€ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œํ˜„ DRF Back skeleton ์ฝ”๋“œ ํ™•์ธ Models from django.db import models from django.conf import settings # Create your models here... 2022. 11. 20.