4주차

허현진·2021년 6월 28일
0

프론트&백

목록 보기
2/5

flask

flask 프레임워크 : 서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있음.

플라스크 시작 코드

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)

--> localhost : 5000

localhost:5000이랑 파이썬에서 브라우저 여는 것의 차이

  • localhost는 내 컴퓨터에서 만든 서버에 요청을 해서 서버에서 가지고 있던 index.html파일을 받아와서 그린 것

  • 파이썬 내 브라우저는 index.html파일을 그냥 연 것임

flask 시작

API만들기

  • GET
    --> 데이터 조회(Read)요청할 때
    --> 데이터 전달 : URL뒤에 물음표 붙여서 key=value로 전달 ex) google.com?q=북극곰
  • POST
    --> Create, Update,Delete
    --> 데이터 전달 : 바로 보이지 않는 HTML body에 key:value 형태로 전달

GET요청 API코드

@app.route('/test', methods=['GET'])
def test_get():
title_receive = request.args.get('title_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)
}
})

POST요청 API코드

@app.route('/test', methods=['POST'])
def test_post():
title_receive = request.form['title_give']
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

POST 요청 확인 Ajax코드

$.ajax({
type: "POST",
url: "/test",
data: { title_give:'봄날은간다' },
success: function(response){
console.log(response)
}
})

app.py : 서버 / index.html : 클라이언트

app.py뼈대

from flask import Flask, render_template, jsonify, request
app = Flask(name)

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

HTML을 주는 부분

@app.route('/')
def home():
return render_template('index.html')

@app.route('/memo', methods=['GET'])
def listing():
sample_receive = request.args.get('sample_give')
print(sample_receive)
return jsonify({'msg':'GET 연결되었습니다!'})

API 역할을 하는 부분

@app.route('/memo', methods=['POST'])
def saving():
sample_receive = request.form['sample_give']
print(sample_receive)
return jsonify({'msg':'POST 연결되었습니다!'})

if name == 'main':
app.run('0.0.0.0',port=5000,debug=True)

나홀로 메모장 설계 계획짜기

  1. URL,코멘트를 서버쪽에 보내줘서 서버에서 그 데이터를 DB에 저장하는 것.(POST)-create)
  • 그 데이터 : 이미지, 링크, 제목, 요약, 코멘트
    (URL만 가지고 크롤링 해오는 것-meta태그 스크래핑)
  • 서버가 일 다하면 success제공
  1. 데이터를 보여주는 것(GET-read)
  • 데이터 클라이언트로 부터 받을 필요 없음
  • DB에 저장되어 있는 내용으로 카드를 만들어서 붙이면 됨.

Q. 2번은 언제 클라이언트에서 언제 호출? -> 로딩이 끝나면 바로

--> 기사저장 버튼에 ajax 콜 하나 생성
--> 로딩하면 바로 호출되는 것에 ajax콜 하나 생성

meta_tag사용하기

브라우저에서 들어갔을 때 meta_tag의 순서와 파이썬 코드가 접속했을 떄 meta_tag순서가 다를 수 있기 때문에 원하는 정보를 크롤링하지 못하는 경우가 있음

--> beautifulsoup의 새로운 사용방법
soup.select_one('meta[property="og:title"]') //meta태그 중에서 []안의 속성이 일치하는 놈을 가져와라

post 순서

  1. 클라이언트와 서버 연결 확인
  2. 서버 만들기
    --> url과 코멘트 받기
  3. 클라이언트 만들기
    --> url과 코멘트 가져가기
  4. 완성 확인

app.js

POST - 무슨 경로로 데이터 받아올 것인지 지정하고 그 값을 DB에 저장
(경로지정, doc = {} , db.shops.insert_one(doc))
GET - db에 있는 값 가져오기오고 그 값을 jsonify를 통해 전달
(shops = list(db.shops.find({},{'id':False})
jsonify({'all_reviews':reviews})

index.html

POST - html상에서 값을 받아와서 data부분을통해 서버에 값 전달
(let name = $('#order-name').val()...
name_receive:name....)

GET -
data부분은 안건드리고 success부분에서 jsonify를 통해 전달받은 값을 저장해두고 for문 돌리면서 temp_html써서 붙이기
(let orders = response['all-orders']
let name = orders[i]['name']....
temp_html = ...
$('#order-box').append(temp_html))

https://www.notion.so/4-682b2d244357441f8469b861562781fc

profile
코딩일지..

0개의 댓글