๐Ÿ‘จโ€๐Ÿ’ป Seungineer's GitHub Contribution

๐Ÿงญ KAIST JUNGLE

[๐Ÿงญ๏ธJungle] Own project(Finished)- TIL

seungineer = seungwoo + engineer 2024. 1. 15. 23:34

์ด์ „ ๊ธ€์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

2024.01.14 - [๐Ÿ”จ TIL/๐Ÿงญ KAIST JUNGLE] - [๐Ÿงญ๏ธJungle] Own project - TIL

 

[๐Ÿงญ๏ธJungle] Own project - TIL

โ›๏ธOwn Project URL, Memo๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, card columns ํ˜•์‹์œผ๋กœ ์ €์žฅํ–ˆ๋˜ ๋‚ด์šฉ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ์‚ฌ์ดํŠธ. โœ”๏ธ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„ Card Columns๋ฅผ ํ‘œ์‹œ: ์™„๋ฃŒ(Bootstrap Document์—์„œ ๊ฐ€์ ธ์˜ด(๋‹จ์ˆœ Div ํƒœ๊ทธ ํ†ต

seungineer.tistory.com


โ›๏ธOwn Project

URL, Memo๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, card columns ํ˜•์‹์œผ๋กœ ์ €์žฅํ–ˆ๋˜ ๋‚ด์šฉ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ์‚ฌ์ดํŠธ.


โœ”๏ธ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„

...

  1. ํ˜„์žฌ๋Š” Card Columns๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ‘œ์‹œํ–ˆ์ง€๋งŒ, DB์— ์žˆ๋Š” ์ €์žฅ๋œ ์ •๋ณด์˜ ๊ฐœ์ˆ˜ ๋งŒํผ ํ‘œ์‹œํ•˜๋„๋ก ์ˆ˜์ • ํ•„์š” 
    1. ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋˜์ž๋งˆ์ž → MongoDB์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ์š”์ฒญ → HTML์—์„œ JS์˜ .add ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • Tag๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•จ (DB API์— Ajax๋ฅผ ํ†ตํ•ด์„œ Key ๋ฅผ ์š”์ฒญํ•˜์—ฌ Value๋ฅผ ๋ฐ›์•„๋‚ด๋ฉด ๋จ. ์•„๋ž˜ ์ฝ”๋“œ ์ฐธ๊ณ .)
@app.route('/load', methods = ['GET'])
def load():
   return jsonify({'result':'success', 'msg':'GET ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!'})
function showArticles() {
          $.ajax({
            type: "GET", // POST ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•˜๊ฒ ๋‹ค.
            url: "/load", // /memo๋ผ๋Š” url์— ์š”์ฒญํ•˜๊ฒ ๋‹ค.
            data: {}, // ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๋Š” ๋ฐฉ๋ฒ•
            success: function (response) { // ์„ฑ๊ณตํ•˜๋ฉด
                if (response["result"] == "success") {
                   alert("load ํ†ต์‹  ์™„๋ฃŒ!")
                } else {
                    alert("์„œ๋ฒ„ ์˜ค๋ฅ˜!")
                }
            }
          })  
        }
์ดํ›„ load() ํ•จ์ˆ˜ ๋‚ด์— DB์— ์žˆ๋Š” ์ •๋ณด๋ฅผ find method๋กœ ๋ถˆ๋Ÿฌ์™€์„œ listํ™” ํ•œ ํ›„ jsonify ์‹œํ‚ค๋ฉด, JS์—์„œ success ํ›„ ์ด JSON์„ ๊ฐ€์ ธ์™€ HTML์— add ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ช ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ DB์— ์ปจํ…์ธ  ์ €์žฅํ•˜๊ธฐ : ์™„๋ฃŒ

๐Ÿ’ช  Alert, Font, ์—ฌ๋ฐฑ ๋“ฑ ์„ธ๋ถ€ ์‚ฌํ•ญ ์ˆ˜์ •ํ•˜๊ธฐ โ–ถ ๋ณ€๊ฒฝ ํ•„์š” ์‚ฌํ•ญ

  • margin padding ๋“ฑ ์–ด์ƒ‰ํ•œ ๋ถ€๋ถ„ ์ˆ˜์ •ํ•˜๊ธฐ : bootstrap ์ œ๊ณต class = 'form-group'์œผ๋กœ ์š”์†Œ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์ ๋‹นํ•œ ๊ฐ„๊ฒฉ์„ ๋งŒ๋“ค์–ด๋ƒ„
  • font-style ๋ณ€๊ฒฝ, title, comment ๋ถ€๋ถ„ font-color ๋ณ€๊ฒฝ : title, comment ํƒœ๊ทธ์— class ์ง€์ •ํ•˜์—ฌ css๋กœ ํŠน์ • class์˜ font ์ƒ‰์ƒ ๋ณ€๊ฒฝ(color: blue;) 
  • title ํด๋ฆญ ์‹œ url ๋งํฌ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ ๋ณ€๊ฒฝ ํ•„์š” : a ํƒœ๊ทธ์˜ href์— ${'url'} ๋ฐฉ์‹์œผ๋กœ ์‚ฝ์ž… (+ DB์—๋„ url์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์žˆ์–ด์„œ app.py file์—์„œ url ๊นŒ์ง€ DB์— POST ๋˜๋„๋ก ์ˆ˜์ •ํ•จ)
  • ๊ธฐ์‚ฌ ์ €์žฅ ์™„๋ฃŒ ํ›„ ํฌ์ŠคํŒ… ๋ฐ•์Šค ์ž๋™ ๋‹ซ๊ธฐ๋กœ ์ˆ˜์ • : openclose() ํ•จ์ˆ˜(.css("display") ๊ฐ€ "none" or "block" ์— ๋”ฐ๋ผ์„œ css dsiplay ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜)๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋’€๊ธฐ์—  ํฌ์ŠคํŒ… ์™„๋ฃŒ alert ์ดํ›„ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰์‹œ์ผœ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋์Œ

๐Ÿฅณ์™„์ „ํžˆ ์„ฑ๊ณต! ๐Ÿฅณ


๐Ÿ’ก A-Ha

  • Javascript์—์„œ list์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ index๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” python ์ฒ˜๋Ÿผ(var[-1]) ๋ถˆ๊ฐ€๋Šฅ → var[var.length -1 - i] ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

Flask DB์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์™€์„œ HTML์— ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ •

  • 'app.py' file์—์„œ server API ํ˜•์‹์— ๋งž๋Š” 'methods = ['GET']' ์„ server์— ์ž…๋ ฅ ์‹œ 'response' ๋ณ€์ˆ˜์— ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ๋ฐ˜ํ™˜๋œ 'response'๋ฅผ jsonify ํ•จ์ˆ˜๋กœ JSON ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ฒŒ ํ•œ๋‹ค. JSON ํ˜•์‹์œผ๋กœ ๋œ data๋ฅผ 'index.html' file์—์„œ $.ajax์˜ 'success : { }' ๋ถ€๋ถ„์—์„œ ๋‹ค๋ฃจ์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” HTML ํ˜•์‹์œผ๋กœ ๋งŒ๋“ ๋‹ค.