์ˆ˜๊ฐ•์ผ์ง€ ๐Ÿ“–

chaenyยท2020๋…„ 8์›” 14์ผ
0

1-1์ฃผ์ฐจ

1) HTML + CSS (์‹ค์Šต 2๊ฐœ) ๐Ÿ‘Œ

background-image: url("#");
background-size: cover;
background-position: center;

๊ฐ€์šด๋ฐ ์ •๋ ฌ
width: 300px; ๋งž์ถ”๊ณ 
margin: auto;

๊ธ€๊ผด
<link href="https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap" rel="stylesheet">

<style>
  * {
    font-family: 'Nanum Gothic', sans-serif;
  }
  
css ๋ถ„๋ฆฌ
<link rel="stylesheet" type="text/css" href = "(cssํŒŒ์ผ์ด๋ฆ„).css">

2) ๋ฌธ์ œ์€ํ–‰ (CSS ์„ ํƒ์ž) ๐Ÿšฉ

1-2์ฃผ์ฐจ

1) ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํ™œ์šฉ (์‹ค์Šต 1๊ฐœ) ๐Ÿ‘Œ

 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
          integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

2) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ๋ฌธ๋ฒ• (๋ณ€์ˆ˜, ๋ฐฐ์—ด, ๊ฐ์ฒด, ํ•จ์ˆ˜) ๐Ÿ‘Œ

let myEmail = 'aaaa@gmail.com'; 

  1. ํŠน์ • ๋ฌธ์ž๋กœ ๋‚˜๋ˆ„๊ธฐ 
  2. ํŠน์ • ๋ฌธ์ž๋กœ ํ•ฉ์น˜๊ธฐ 
  3. gmail๋งŒ ์ถ”์ถœํ•˜๊ธฐ
let wizards = [{'name':'Harry','age':40},{'name':'Ron Weasley','age':40}]

 - 'harry' ์ถœ๋ ฅํ•˜๊ธฐ
    

๐Ÿ”ฅ 1์ฃผ์ฐจ ์ˆ™์ œ ๐Ÿ‘Œ

๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํ™œ์šฉํ•ด์„œ ๋ฏธ๋‹ˆ ์‡ผํ•‘๋ชฐ ๋งŒ๋“ค๊ธฐ

    .button {
               margin: 10px auto;
               width: 10%;
               display: block;
           }
               ๋ฒ„ํŠผ ๊ฐ€์šด๋ฐ ์ •๋ ฌ

2-1์ฃผ์ฐจ

1) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ๋ฌธ๋ฒ• (์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ) ๐Ÿ‘Œ

1. AND ์กฐ๊ฑด && : ๋ชจ๋“  ์กฐ๊ฑด๋“ค์ด true ์—ฌ์•ผ true
2. OR ์กฐ๊ฑด || : ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ true์ด๋ฉด, true

let fruitsBasket = ['์‚ฌ๊ณผ','๊ฐ','๊ฐ','๋ฐฐ','ํฌ๋„','ํฌ๋„','๋”ธ๊ธฐ','ํฌ๋„','๊ฐ','์ˆ˜๋ฐ•','๋”ธ๊ธฐ']
   
 - ๊ณผ์ผ์„ธ๊ธฐ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ [๋”ฐ๋กœ ๋ณ€์ˆ˜(๋ฐ•์Šค) ๋งŒ๋“ค๊ธฐ]

2) JQuery (์‹ค์Šต 2๊ฐœ)

	1) ํฌ์ŠคํŒ… ๋ฐ•์Šค ์—ด๊ธฐ/๋‹ซ๊ธฐ ๐Ÿ‘Œ
 	2) jQuery+javascript ๐Ÿ‘Œ

JQuery import ํ•˜๊ธฐ

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

jQuery ์ ์šฉ

โญ  hide(), show(), tempHtml = ๋ฐฑํ‹ฑ, 
    $('# id๊ฐ’ ').css('width', '300px'),
    $('# id๊ฐ’ ').text('@#$%'),
    $('# id๊ฐ’ ').append(tmepHtml), ${} ๋“ฑ๋“ฑ..

3) ๋ฌธ์ œ์€ํ–‰ (Javascript 3๋ฌธ์ œ ๐Ÿ‘Œ, JQuery 2๋ฌธ์ œ ๐Ÿ‘Œ)

 1~2. ๋ˆ„๋ฅธ ํšŸ์ˆ˜๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” onclick ํ•จ์ˆ˜
    <button onclick="handleClick()">์ด ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋ณด์„ธ์š”</button>
 
 3. ๋ฐ˜๋ณต๋ฌธ & ๋”•์…”๋„ˆ๋ฆฌ
 
 2. ์ด๋ฉ”์ผ ํŒ๋ณ„ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

2-2์ฃผ์ฐจ

1) Ajax (์‹ค์Šต 3๊ฐœ) ๐Ÿ‘Œ

  1~3. Javascript + jQuery + Ajax 
    let tempHtml = '';

	if(guMise >= 40) {
		tempHtml = `<li class="red">${guName} : ${guMise}</li>`;
	} else {
		tempHtml = `<li>${guName} : ${guMise}</li>`;
	}
		$('#mise-info').append(tempHtml);


- jQuery ์ด๋ฏธ์ง€ํƒœ๊ทธ src ๋ฐ”๊พธ๊ธฐ

    let image = response[0]['url'];
    $("#img-cat").attr("src", image);

2) ๋ฌธ์ œ์€ํ–‰ (Javascript + jQuery + Ajax) 4๋ฌธ์ œ ๐Ÿ‘Œ

2. console.log๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฐพ์•˜๋‹ค ๐Ÿ‘Œ
4. ํ•œ๋ฒˆ๋” ํ’€๊ธฐ ๐Ÿšฉ

๐Ÿ”ฅ 2์ฃผ์ฐจ ์ˆ™์ œ ๐Ÿ‘Œ

๋กœ๋”ฉ ์™„๋ฃŒ์‹œ, ํ™˜์œจ API ์ด์šฉํ•ด ํ™˜์œจ ํ‘œ์‹œํ•˜๊ธฐ

<select class="custom-select" id="order-count">
    <option selected value=""> -- ์ˆ˜๋Ÿ‰์„ ์„ ํƒํ•˜์„ธ์š” -- </option>
    <option value="1">1๊ฐœ</option>
    <option value="2">2๊ฐœ</option>
    <option value="3">3๊ฐœ</option>
</select>

 ์ˆ˜๋Ÿ‰๊ฐ’ ๊ฐ€์ ธ์˜ฌ ๋•Œ value="" ํ•„์ˆ˜

3-1์ฃผ์ฐจ

1) Javascript + jQuery + Ajax ๋ณต์Šต ๐Ÿ‘Œ

2) ํŒŒ์ด์ฌ(Python) ๊ธฐ์ดˆ ๋ฌธ๋ฒ• ๐Ÿšฉ

3) ์›น ์Šคํฌ๋ž˜ํ•‘(ํฌ๋กค๋ง) ๐Ÿ‘Œ

4) ๋ฌธ์ œ์€ํ–‰ ์›น ์Šคํฌ๋ž˜ํ•‘(ํฌ๋กค๋ง) 3๋ฌธ์ œ ๐Ÿšฉ


3-2์ฃผ์ฐจ

1) mongoDB ์‚ฌ์šฉ๋ฒ• CRUD ๐Ÿ‘Œ

  - db.users.insert_one(doc) ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  - list(db.users.find({})) ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ๋ณด๊ธฐ
  - list(db.users.find({'age': 40})) ํŠน์ •์กฐ๊ฑด
  - db.users.find_one({'name': '๋ค๋ธ”๋„์–ด'}, {'_id': False}) 
    ํŠน์ • ํ‚ค ๊ฐ’์„ ๋นผ๊ณ  ๋ณด๊ธฐ
  - db.users.update_one({'name': '๋ค๋ธ”๋„์–ด'}, {'$set': {'age': 19}})
  
  ์ •๋ฆฌ โญ
  # Create(์ƒ์„ฑ)
     user1 = {'name': '๋ก ', 'age': 40}
     user2 = {'name': 'ํ•ด๋ฆฌ', 'age': 40}
     db.users.insert_one(user1)
     db.users.insert_one(user2)

     # Read(์กฐํšŒ) - ํ•œ ๊ฐœ ๊ฐ’๋งŒ
     user = db.users.find_one({'name': '๋ก '})

     # Read(์กฐํšŒ) - ์—ฌ๋Ÿฌ ๊ฐ’ ( _id ๊ฐ’์€ ์ œ์™ธํ•˜๊ณ  ์ถœ๋ ฅ)
     same_ages = list(db.users.find({'age': 40}, {'_id': False}))

     # Update(์—…๋ฐ์ดํŠธ) - ์—ฌ๋Ÿฌ ๊ฐ’
     db.people.update_many({'age': 40}, { '$set': {'age': 70}})

     # Update(์—…๋ฐ์ดํŠธ) - ํ•˜๋‚˜ ๊ฐ’
     db.users.update_one({'name': '๋ก '}, {'$set': {'age': 116}})

     # Delete(์‚ญ์ œ)
     db.users.delete_one({'name': '๋ก '})
  

2) ์Šคํฌ๋ž˜ํ•‘ ์ •๋ณด DB ์‚ฝ์ž… (์ฃผ์˜) ๐Ÿšฉ ๐Ÿ‘Œ

3) mongoDB CRUD ์‘์šฉ ๐Ÿ‘Œ


๐Ÿ”ฅ 3์ฃผ์ฐจ ์ˆ™์ œ ๐Ÿšฉ

์ง€๋‹ˆ๋ฎค์ง 1~50์œ„ ๊ณก ์ •๋ณด ์Šคํฌ๋ž˜ํ•‘


4์ฃผ์ฐจ

1) Flask ๊ธฐ์ดˆ - API ๋งŒ๋“ค๊ธฐ ๐Ÿ‘Œ

1) HTML - render_template ๋„ฃ๊ธฐ
2) <img src="{{ url_for('static', filename='rome.jpg') }}"/>

2) Flask, API - ๋ชจ๋‘์˜ ์ฑ…๋ฆฌ๋ทฐ ๐Ÿ‘Œ

    - ๊ธฐ์กด ๋ฆฌ๋ทฐ ๋ฐ•์Šค ๋น„์šฐ๊ธฐ
    $(document).ready(function () {
        $("#reviews-box").html("");
        showReview();
        });      
  ์ œ๋ชฉ, ์ €์ž, ๋ฆฌ๋ทฐ ์ •๋ณด ์ €์žฅํ•˜๊ธฐ(Create โ†’ POST)

  (์„œ๋ฒ„)
  - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ค€ title, author, review ๊ฐ€์ ธ์˜ค๊ธฐ
    title_receive = request.form['title_give']
  - DB์— ์ •๋ณด ์‚ฝ์ž…ํ•˜๊ธฐ
  - ์„ฑ๊ณต ์—ฌ๋ถ€ & ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
  (ํด๋ผ์ด์–ธํŠธ)
  - ์ œ๋ชฉ, ์ €์ž, ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ธฐ
  - POST์— ์ €์žฅ์„ ์š”์ฒญ
  - ์ฃผ์˜) data: {title_give: title, ๋“ฑ}

  ์ €์žฅ๋œ ๋ฆฌ๋ทฐ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ธฐ(Read โ†’ GET)

  (์„œ๋ฒ„)
  - DB์— ์žˆ๋Š” ๋ชจ๋“ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
  - return jsonify์˜ ['msg'] ๊ฐ’์— ๋„ฃ๊ธฐ
  (ํด๋ผ์ด์–ธํŠธ)
  - ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฌ๊ธฐ

3) Flask, API - ๋‚˜ํ™€๋กœ ๋ฉ”๋ชจ์žฅ ๐Ÿ‘Œ

  ๋ฉ”ํƒ€ํƒœ๊ทธ ์Šคํฌ๋ž˜ํ•‘
  soup.select_one('meta[property="og:image"]')
  soup.select_one('meta[property="og:title"]')
  soup.select_one('meta[property="og:description"]')
POST
(์„œ๋ฒ„)
- ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ธฐ url, comment
- meta tag ์Šคํฌ๋ž˜ํ•‘ํ•˜๊ธฐ 
- ์ฃผ์˜) data = requests.get(url_receive, headers=headers)
  url์„ url_receive๋กœ
- mongoDB์— ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ url, comment, title, image, desc
(ํด๋ผ์ด์–ธํŠธ)
- ๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ 

GET

โญ DBํด๋” ์ด๋ฆ„ ์ฃผ์˜

๐Ÿ”ฅ 4์ฃผ์ฐจ ์ˆ™์ œ ๐Ÿ‘Œ

์›ํŽ˜์ด์ง€ ์‡ผํ•‘๋ชฐ ์™„์„ฑํ•˜๊ธฐ

   post ๋ฐ‘์—
   window.location.reload();

5์ฃผ์ฐจ

  • Flask, API ๋งˆ์ด ํŽ˜์ด๋ณด๋ฆฟ ๋ฌด๋น„์Šคํƒ€ ๐Ÿ‘Œ
1. ์กฐํšŒ(Read) ๊ธฐ๋Šฅ GET : ์˜ํ™”์ธ ์ •๋ณด ์ „์ฒด๋ฅผ ์กฐํšŒ
   1) DB์— ์ด๋ฏธ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ƒํƒœ 
      post ๊ฐ’๊ฐ€์ ธ์˜ฌ ํ•„์š”์—†์Œ
   2) GET ์—ฌ๋Ÿฌ ๊ฐ’๋“ค ๊ฐ€์ ธ์˜ค๊ธฐ
      - like๊ฐ€ ๋งŽ์€ ์ˆœ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ find๋’ค์— .sort('like', -1)
      
2. ์ข‹์•„์š”(Update) ๊ธฐ๋Šฅ: POST
   ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์€ ์ด๋ฆ„(name_give)์œผ๋กœ ์ฐพ์•„์„œ ์ข‹์•„์š”(like)๋ฅผ ์ฆ๊ฐ€ 
   
   (์„œ๋ฒ„)
   - name_receive = request.form['name_give']
   - mystar ๋ชฉ๋ก์—์„œ find_one์œผ๋กœ name์ด name_receive์™€ ์ผ์น˜ํ•˜๋Š” star๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
   - ์ด๋ฆ„์œผ๋กœ ๋œ ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ์•„์„œ ๋ผ์ดํฌ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ 
   - ๊น€๋‹ค๋ฏธ ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋ €๋‹ค๋ฉด ๊น€๋‹ค๋ฏธ์˜ ์ข‹์•„์š” ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
   - current_like = db.mystar.find_one({'name': name_receive})['like']
   - star์˜ like ์— 1์„ ๋”ํ•ด์ค€ new_like ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
   - new_like = current_like + 1
   - mystar ๋ชฉ๋ก์—์„œ name์ด name_receive์ธ ๋ฌธ์„œ์˜ like ๋ฅผ new_like๋กœ ๋ณ€๊ฒฝ(์—…๋ฐ์ดํŠธ)
   - db.mystar.update_one({'name': name_receive}, {'$set': {'like': new_like}})
   
   (ํด๋ผ์ด์–ธํŠธ)
   data: {name_give: name}
   
   
3. ์‚ญ์ œ(Delete) ๊ธฐ๋Šฅ: 
   ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์€ ์ด๋ฆ„(name_give)์œผ๋กœ ์˜ํ™”์ธ์„ ์ฐพ๊ณ , ํ•ด๋‹น ์˜ํ™”์ธ์„ ์‚ญ์ œ
   
    - db.mystar.delete_one({'name': name_receive})

6์ฃผ์ฐจ

  • ์„œ๋ฒ„ ๊ตฌ๋งค, ๊ฐ„๋‹จํ•œ flask ์„œ๋ฒ„ ์˜ฌ๋ฆฌ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€