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) ๋ถํธ์คํธ๋ฉ ํ์ฉ (์ค์ต 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' ์ถ๋ ฅํ๊ธฐ
๋ถํธ์คํธ๋ฉ ํ์ฉํด์ ๋ฏธ๋ ์ผํ๋ชฐ ๋ง๋ค๊ธฐ
.button {
margin: 10px auto;
width: 10%;
display: block;
}
๋ฒํผ ๊ฐ์ด๋ฐ ์ ๋ ฌ
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. ์ด๋ฉ์ผ ํ๋ณ ํจ์ ๋ง๋ค๊ธฐ
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. ํ๋ฒ๋ ํ๊ธฐ ๐ฉ
๋ก๋ฉ ์๋ฃ์, ํ์จ 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="" ํ์
1) Javascript + jQuery + Ajax ๋ณต์ต ๐
2) ํ์ด์ฌ(Python) ๊ธฐ์ด ๋ฌธ๋ฒ ๐ฉ
3) ์น ์คํฌ๋ํ(ํฌ๋กค๋ง) ๐
4) ๋ฌธ์ ์ํ ์น ์คํฌ๋ํ(ํฌ๋กค๋ง) 3๋ฌธ์ ๐ฉ
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 ์์ฉ ๐
์ง๋๋ฎค์ง 1~50์ ๊ณก ์ ๋ณด ์คํฌ๋ํ
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ํด๋ ์ด๋ฆ ์ฃผ์
์ํ์ด์ง ์ผํ๋ชฐ ์์ฑํ๊ธฐ
post ๋ฐ์
window.location.reload();
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})