๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
![[ajax] post, get ๋ฐฉ์ ์ด์ฉํ ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqClXr%2FbtrMNMgOmRr%2FzYSgZuTVQJ3WzQjiktaKhK%2Fimg.png)
[ajax] post, get ๋ฐฉ์ ์ด์ฉํ ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ
์ฌ์ฉ ์คํ : html, css, bootstrap, ajax, mongoDB ์๋ฃ ๊ตฌ์กฐ : templates์ index.html ์ฝ๋ ๊น์น๋ฏผ ํฌ๋ช ๋ก ํ์ฌ๊ธฐ์จ: 36๋ ๋๋ค์ ์์๋๊ธ ์์ ๋จ๊ธฐ๊ธฐ app.py ์ฝ๋ - mongoDB ๋ ๋ณธ์ธ์ DB ๊ณ์ ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค URL ์ ์ด์ฉํ๋ฉด ์ ์ ๊ฐ๋ฅํฉ๋๋ค from flask import Flask, render_template, request, jsonify app = Flask(__name__) # DB from pymongo import MongoClient client = MongoClient('mongodb+srv://test:test@cluster0.wpvuwzi.mongodb.net/Cluster0?retryWrites=true&w=majo..
![[python] ์์ ์ ๋ณด ํฌ๋กค๋งํ๊ธฐ(feat.์น๊ตฌ ์ถ์ฒ ์ด๋ฒคํธ)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeAeuN%2FbtrMKsuNLz5%2FoTGy6F48O8WTTK4ItmSjx0%2Fimg.png)
[python] ์์ ์ ๋ณด ํฌ๋กค๋งํ๊ธฐ(feat.์น๊ตฌ ์ถ์ฒ ์ด๋ฒคํธ)
์คํ๋ฅดํ ์น๊ฐ๋ฐ ์ฝ์ค 3์ฃผ์ฐจ ๊ณผ์ ๊ด๋ จ ๋ด์ฉ - ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ ๊ธฐ๋ฅ์ ์๋ ์ฐธ์กฐ ์์ผ๋, ์ฌ์ฉํด๋ณด์ง๋ ๋ชปํด์ ์์ฌ์ .next_siblings() - ์ด๊ธฐ์ ssl ์ธ์ฆ ๊ด๋ จ์๋ฌ๊ฐ ์์ด์, requests ์์ verify = False ๋ก ์ค์ ํจ ์ฌ์ฉํ ์ฝ๋ # genie ํฌ๋กค๋ง # ๊ฐ์ํ๊ฒฝ conda env sparta_py38 ## ํฌ๋กค๋ง ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import requests from bs4 import BeautifulSoup # ์์กด์ฑ ์๋ฌ import ssl ## DB # from pymongo import MongoClient headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36..
[html + css + js] ๊ณต๊ณต๊ธฐ์จ API ํ์ฉ - ajax
์ฌ์ฉ ๊ธฐ๋ฅ - ํ๋ฉด ์ ์ ์ฑ๊ณต์ alert ์ฐฝ ๋์ธ ์ ์๋๋ก ํจ - ๊ธฐ์จ API ํ์ฉํ์ฌ ์จ๋ ๋ฐ์ดํฐ ๋ถ๋ฌ์์ ํ๋ฉด์ ๋์ ์ผ๋ก ๋์ - ์ ์ ์ธ ์จ๋๊ฐ ๋์น๋จ - ๋๋จธ์ง๋ ๊ธฐ์กด์ ๋ง๋ค์ด๋์ ๊น์น๋ฏผ ๋ฉํผ ํฌ๋ช ๋ก์์ ๊ตฌํํ์์ ์คํ๋ฅดํ ์น๊ฐ๋ฐ ๊ฐ๋ฐ ์ผ์ง ์์ฑ์ผ๋ก ์ธํ์ฌ ๊ธ ์์ฑ ์ฌ์ฉํ ์ฝ๋ ์ฌ์ฉํ ์ฝ๋๋ ์๋์ ๊ฐ์ ๊น์น๋ฏผ ํฌ๋ช ๋ก ํ์ฌ ๊ธฐ์จ : 1๋๋ ๋๋ค์ ์์ ๋๊ธ ์์ ๋จ๊ธฐ๊ธฐ ์๋ก์ด ์จ๋ฒ ๋๋ฌด ๋ฉ์ ธ์!!!!!!!! Tom ์๋ก์ด ์จ๋ฒ ๋๋ฌด ๋ฉ์ ธ์!!!!!!!! Tom ์๋ก์ด ์จ๋ฒ ๋๋ฌด ๋ฉ์ ธ์!!!!!!!! Tom ์ฝ๋์ ๊ดํ ์ง๋ฌธ์ ์ธ์ ๋ ์ง ๋๊ธ ๋ฐ๋๋๋ค.
![[html/css] ์คํ๋ฅดํ์ฝ๋ฉ 1์ฃผ์ฐจ:์น๊ฐ๋ฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjBbgf%2FbtrMxXpm6in%2Fvmswgox8ltQYG5BjkkUKr1%2Fimg.png)
[html/css] ์คํ๋ฅดํ์ฝ๋ฉ 1์ฃผ์ฐจ:์น๊ฐ๋ฐ
์์ฑ ํ๋ฉด - ํฐํธ๋ ๊ตฌ๊ธ ํฐํธ๋ฅผ ํ์ฉ - ๋ฒํผ, ์ด๋ฏธ์ง, Quote ๋ค์ ๋ถํธ์คํธ๋ฉ ํ์ฉ - ํ์์ ๋ง๊ฒ ์ปค์คํ ๋ง์ด์งํจ - ์ปค๋ฒ ์ด๋ฏธ์ง๋ฅผ ์ด๋ก๊ฒ ์ฒ๋ฆฌํ์ฌ, ํฐ์ ์ ๋ชฉ์ด ๋๋ณด์ด๊ฒ ๊ตฌ์ฑ - ๋ง์ง ์ฒ๋ฆฌ๋ฅผ ์ฌ์ ๋กญ๊ฒ ์ค์ ํ์ฌ ๊ณต๊ฐ๊ฐ์ ๊ฐ๊ธฐ ์ํด ๋ ธ๋ ฅ ํฌํด๋ฝ ํ๋ฉด ํ์ด์ง ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํด๋ด (์๊ฐ : 20๋ถ) ์ฝ๋ ๊น์น๋ฏผ ํฌ๋ช ๋ก ๋๋ค์ ์์ ๋๊ธ ์์ ๋จ๊ธฐ๊ธฐ ์๋ก์ด ์จ๋ฒ ๋๋ฌด ๋ฉ์ ธ์!!!!!!!! Tom ์๋ก์ด ์จ๋ฒ ๋๋ฌด ๋ฉ์ ธ์!!!!!!!! Tom ์๋ก์ด ์จ๋ฒ ๋๋ฌด ๋ฉ์ ธ์!!!!!!!! Tom
![[Vue.js] ๋ฌธ๋ฒ ๊ธฐ์ด 2ํธ(props, v-bind, v-on, router, axios)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEtfIz%2FbtrMrx4iv90%2FpvVKf2bGaNNIgovU39K3H0%2Fimg.png)
[Vue.js] ๋ฌธ๋ฒ ๊ธฐ์ด 2ํธ(props, v-bind, v-on, router, axios)
๐ก watch ์์ฑ data์ ๋ณํ์ ๋ฐ๋ผ์ ํน์ ๋ก์ง์ ์คํ ์ฐ์ vue ์ธ์คํด์ค ๋ด๋ถ์ ๋ค์ด๊ฐ๋ ์์ฑ ์์ el, data, watch, methods ๋ฑ watch ์์ data ๊ฐ์ธ num์ ๊ณ ์ ํด๋ watch๋ computed๋ ๋น์ทํ ๋๋์ ๊ฐ๊ณ ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋น์ค ๊ตฌํ์ ์์ด์์ ์ฐจ์ด์ ์??? computed ๋ ๋จ์ํ ๊ณ์ฐ, ํ ์คํธ ์ ๋ ฅ ๊ฐ์ ๋ฐ์์ validation watch๋ ๋ฌด๊ฑฐ์, ๋งค๋ฒ ์คํ๋๋ ๊ฒ์ด ๋ถ๋ด์ค๋ฌ์ด ๊ฒ๋ค!!!!!!!!( ์ค์) ๊ฐ์ ๋ณํ๋ฅผ ๊ณ์ ์ถ์ ํจ function(newValue, oldValue) ๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์ this.fetchUserByNumber(newValue) ๐ก computed ์์ฑ์ ์ด์ฉํ ํด๋์ค ์ฝ๋ ์์ฑ๋ฐ boolean ํ์ ์ ๋ํ..
![[Vue.js] ๋ฌธ๋ฒ ๊ธฐ์ด 1ํธ(props, v-bind, v-on, router, axios)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQn4YV%2FbtrMnmWHoSc%2FzpDaawBh53aKd1j9CTrBE1%2Fimg.png)
[Vue.js] ๋ฌธ๋ฒ ๊ธฐ์ด 1ํธ(props, v-bind, v-on, router, axios)
์ด๋ฒคํธ ์์ฑ์ ๋ํด์ ๋ค๋ค๋ณด๊ณ ์ ํ๋ค. ๋ฌผ๋ก , ๊ทธ ์ธ์๋ ์ ๋ฐ์ ์ผ๋ก Vue.js ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ ๋ฆฌํ ๋ด์ฉ์ ์ ๋ ๋ธ๋ก๊ทธ ๊ธ์ ์ฐ์ฌํ๋ ค๊ณ ํ๋ค. ๋์์์ด ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฑฐ๋ผ, ์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ํผ๋๋ฐฑ ์ฃผ๊ธธ๋ฐ๋ผ๋ฉฐ, ์ฝ์ด์ฃผ์ ์ ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Thanks for you guys. ์น๊ฐ๋ฐ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ ์ ํํ ํ๋ ์์ํฌ์ธ ๋งํผ, React๋ Angular ๋งํผ์ ์๋์ง๋ง, Vue.js ๋ ์ถฉ๋ถํ ๋งค๋ ฅ์ ์ธ ๋๊ตฌ์ธ ๊ฒ ๊ฐ์์ ์ฌ๋ฐ๋ค. inputfiled + prop ๊ด๋ จ ๊ฐ๋ ์ ์ ๋ฆฌ๋์ด ์์ https://whitepro.tistory.com/255 ์๋ฐ์คํฌ๋ฆฝํธ - forEach ๋ฐฐ์ด์ ์ํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋ ๊ธฐ์กด ์ฝ๋ const numbers = [1,2,3,4,5] for (i =..
![[ํด๋/ํ๋ฆฝ4]์ง์ธ ์ถ์ฒ ์ด๋ฒคํธ GWS045477680607 (feat.๋ฌด๋ฃ ์คํ๋ฒ
์ค ๊ธฐํํฐ์ฝ ๋ฐ๊ธฐ)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3VoHU%2FbtrKgs66tIK%2FDmoqNSZWHU9tWoyEVugqc0%2Fimg.png)
[ํด๋/ํ๋ฆฝ4]์ง์ธ ์ถ์ฒ ์ด๋ฒคํธ GWS045477680607 (feat.๋ฌด๋ฃ ์คํ๋ฒ ์ค ๊ธฐํํฐ์ฝ ๋ฐ๊ธฐ)
์๋ ํ์ธ์ ๊ณต๋ถํ๋ ์ ์ด์ ๋๋ค. ์ต๊ทผ์ ์ผ์ฑ์ ์์์ zํ๋ฆฝ4 ์ zํด๋4๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์นญํ๋๋ฐ์. ์ ๋ ํ๋ฆฝ4์ ํด๋4๋ฅผ ๋ณด๊ณ ์ ๋ง ์ผ์ฑ์ ์๊ฐ ํด๋๋ธ ํฐ์ ๊ฐ์๋ก ๋ฑ๊ทนํ๋ค๋ผ๊ณ ๋๋ ์ ์์์ต๋๋ค. ํ์ง๋ถ๋ถ์ ๊ฐ๋๋ฉฐ, ๋ด๋ถ UI/UX ๊ตฌ์ฑ์ด๋ผ๋ ์ง, ์ ๊ทธ๋ ์ด๋๋ ์นด๋ฉ๋ผ ์ฑ๋ฅ์ด๋ผ๋์ง, ์ ์์ 20~30% ํฅ์๋ ๋ฐฐํฐ๋ฆฌ ์ฑ๋ฅ ๋ฑ์ ์๊ฐํ์๋๋ง์ด์ฃ . ๋ฐ๋ก ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ฉด, zํด๋๋ zํ๋ฆฝ ์๋ฆฌ์ฆ๋ฅผ ๊ตฌ๋งคํ๊ณ ์ ํ๋ ์ ์ฌ์ ์๋น์๋ผ๋ฉด, ์๋ก ์คํ๋ฒ ์ค ๊ธฐํํฐ์ฝ์ ๋ฌด๋ฃ๋ก ๋ฐ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ํธ๋ํฐ์ ๊ตฌ๋งคํ ์์ ์ด๋ผ๋ฉด, ์ถ๊ฐ๋ก ์ป์ ์ ์๋ ํํ์ด๋ ์ ํด์ง ๊ธฐ๊ฐ ์์ ์ ์ฒญํ์๋ฉด ๋ฐ๋ก ๋ฐ์ผ์ค ์ ์์ต๋๋ค. ์กฐ์ฌ์ค๋ฝ๊ฒ ๋ถํ๋๋ ค๋ด์~ ์ถ๊ฐ๋ก ์ ๋ฅผ ์ถ์ฒ ๋ง์ด ํด์ฃผ์ค์๋ก, ๊ฐ์ด NFT ๋ฐ์ ์๋ ์์ด์. ๋์ค..
![pycharm ์์ ์๋์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ import ํ๋ ๋ฐฉ๋ฒ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwIRH8%2FbtrJBmGnmOj%2FhQ8dB428fp5xjCTC3LOgE0%2Fimg.png)
pycharm ์์ ์๋์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ import ํ๋ ๋ฐฉ๋ฒ
pycharm ์์ ์๋์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ import ํ๋ ๋ฐฉ๋ฒ ctrl + alt + s ๋ฅผ ํด๋ฆญํ๊ณ ์, ๋ค์๊ณผ ๊ฐ์ด ํ๋จ์ python ์น์ ๋ถ๋ถ์์ show import popup ๋ถ๋ถ์ ํด๋ฆญํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ํด๋์ค๋ฅผ ์ ๋ ฅํ๋ฉด, import ์ ํ์ํ ์ฌํญ๋ค์ด ๋ฐ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ฝ๋ฉ์ ํ ๋, class ๊ฐ import ๋์ง ์์๋ค๋ฉด alt + enter๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋๋ค.
![vscode ์ฅ๊ณ : ์ด๋ฏธ์ง ํ์ผ ์ฒ๋ฆฌ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcxdapp%2FbtrJBciUKUl%2FX9pnUJkXUxRVrm70OXtwv0%2Fimg.png)
vscode ์ฅ๊ณ : ์ด๋ฏธ์ง ํ์ผ ์ฒ๋ฆฌ
vscode๋ฅผ ์ด์ฉํ์ฌ, ํ์ด์ ์ธ์ด๋ฅผ ํตํด ์น๊ฐ๋ฐ์ ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๊ฒ ๋ด์ฉ์ด ์ค๊ตฌ๋๋ฐฉ์ด๋, ์ํด๋ฐ๋๋๋ค..ใ Media ํ์ผ ์ฒ๋ฆฌ ์์ 1. HttpRequest.FILES ๋ฅผ ํตํด ํ์ผ์ด ์ ๋ฌ 2. ๋ทฐ ๋ก์ง์ด๋ ํผ ๋ก์ง์ ํตํด์, ์ ํจ์ฑ ๊ฒ์ฆ์ ์ํํจ 3. FileFiled/ImageField ํ๋์ "๊ฒฝ๋ก(๋ฌธ์์ด)"๋ฅผ ์ ์ฅํจ 4. settings.MEDIA_ROOT ๊ฒฝ๋ก์ ํ์ผ์ ์ ์ฅํจ ์ฝ๋ ๋๋ฒ๊น ์ฝ๋ ์ค๋ช 1 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ## __file__ ์ ํ์ผ์ด import ๋ ๋ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ด๊ณ ์์ -> ์ ๋ ๊ฒฝ๋ก๋ก ๋ฐ๊พธ๊ณ -> dirname์ dirname์ ๋ถ๋ชจ์ ๋ถ๋ชจ ๊ฒฝ..
![์ฅ๊ณ : ๊ฒ์ ์ต์
๋ง๋ค๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyQzZ8%2FbtrJGUnvhbC%2FEakT40KKktO5lJ3LlQ7Kzk%2Fimg.png)
์ฅ๊ณ : ๊ฒ์ ์ต์ ๋ง๋ค๊ธฐ
์ฅ๊ณ ๋ชจ๋ธ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ, ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ปค์คํฐ๋ง์ด์ง์ ๋ฐฐ์ฐ๊ณ ์๋ค. ๋ค์์ ์ผ๋ถ ์ค์ต์ ํ๊ธฐ ์ํ ์ฝ๋ ๋ด์ฉ์ด๋ฉฐ, ํํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ด์ฉ์ด๋ค. admin.py ์์์ ์ผ๋ถ ์ฝ๋ @admin.register(Post) ## Wrapping(๊ฐ์ธ๋ ๋ฐฉ๋ฒ) - ๊ฐ์ผ ๋์์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ ์ ์์ class PostAdmin(admin.ModelAdmin): #2. ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๊ณ ์ถ์๋ list_display = ['id', 'message', 'message_length','is_public','created_at', 'updated_at'] # list_display ๋ผ๋ ์์๋ฐ์ ๊ฐ์ฒด๋ก, ๋ณด์ฌ์ง๋ ๊ฒ์ ๋ด๋น list_display_links = ['message'] # ๋งํฌ๊ฐ ๊ธฐ๋ณธ id์ ..