프로젝트 폴더 생성 -> static폴더,templates폴더, app.py 생성 - > flask 패키지 설치(flask 프레임워크 : 서버를 구동시켜주는 편한 코드 모음), (pymongo, dnspython 패키지도 설치 : DB이용) -> 시작코드
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
를 입력하고 실행한다.
templates 안에 index.html 만든다 -> flask 내장함수 render_template 이용
from flask import Flask,** render_template**
app = Flask(__name__)
**@app.route('/')
def home():
return render_template('index.html')**
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
통해 불러온다.
요청 방식에는 get과 post 방식이 있다.
-get : 데이터 조회(read)
-post : 데이터 생성(create), 변경(update), 삭제(delete)
클라(ajax)-> 서버(flask) : 데이터를 보냄
서버(flask)->클라(ajax) : 메세지를 보냄(주문완료!))
(Post 요청 api 코드)(서버코드)
@app.route('/test', methods=['POST'])
def test_post():
title_receive = request.form[‘sample_give’]
print(sample_receive)
return jsonify({'msg': ‘연결완료’})
(Post 요청 확인 ajax코드)(클라이언트 코드)
$.ajax({
type: "POST",
url: "/test",
data: { sample_give:’데이터전송’ },
success: function(response){
console.log(response)
}
})
@app.route("/mars", methods=["POST"])
def web_mars_post():
name_receive = request.form['name_give']
address_receive = request.form['address_give']
size_receive = request.form['size_give']
doc = {
'name':name_receive,
'address':address_receive,
'size':size_receive
}
db.mars.insert_one(doc)
return jsonify({'msg': '주문 완료!'})
function save_order() {
let name = $('#name').val()
let address = $('#address').val()
let size = $('#size').val()
$.ajax({
type: 'POST',
url: '/mars',
data: { name_give: name, address_give: address, size_give: size},
success: function (response) {
alert(response['msg'])
window.location.reload()
}
});
}
DB에 잘 들어갔나 확인
(클라(ajax)-> 서버(flask) : 없음
서버(flask)->클라(ajax) : 전체 주문 보여주기)
(get 요청 api 코드)(서버 코드)
@app.route('/test', methods=['GET'])
def test_get():
sample_receive = request.args.get(’sample_give')
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 GET!'})
(Get 요청 확인 ajax코드)(클라이언트 코드)
$.ajax({
type: "GET",
url: "/test?title_give=봄날은간다",
data: {},
success: function(response){
console.log(response)
}
})
@app.route("/mars", methods=["GET"])
def web_mars_get():
order_list = list(db.mars.find({}, {'_id': False}))
return jsonify({'orders': order_list})
function show_order() {
$.ajax({
type: 'GET',
url: '/mars',
data: {},
success: function (response) {
let rows = response['orders']
for (let i = 0; i < rows.length; i++) {
let name = rows[i]['name']
let address = rows[i]['address']
let size = rows[i]['size']
let temp_html = `<tr>
<td>${name}</td>
<td>${address}</td>
<td>${size}</td>
</tr>`
$('#order-box').append(temp_html)
}
}
});
}
meta tag는 head부분에 들어가는데 검색 시 표시 될 설명문, 사이트 제목, 카톡 공유시 표시 될 이미지 등의 body 외의 사이트 속성을 설명해주는 태그이다.
import requests
from bs4 import BeautifulSoup
url = 'https://movie.naver.com/movie/bi/mi/basic.naver?code=191597'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(url,headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
og_image = soup.select_one('meta[property]="og:image"')
print(og_image)
image = og_image['content']
print(image)
doc = {'image' : image}
db.samples.insert_one(doc)
return jsonify({'msg':'post 연결 완료!'})
이제까지 배워오면서 웹페이지들이 어떻게 만들어지는지 대충 큰 틀을 알 수 있었다. 어떻게 데이터를 요청하고, 데이터를 받아오며, 또 그 데이터를 저장하고, 페이지에 그려주고 이러한 과정을 알 수 있었다. 반복 연습을 통해 물 흐르듯이 만들 수 있도록 해야겠다. 아직까지는 강의에서 보고 시키는 것들만 해서 딱히 막히는 곳은 없는 것 같다. 5주차까지 강의를 다 듣고 파이썬과 자바스크립트 기본 문법 강좌를 들어봐야겠다.