스파르타 웹개발종합반 아홉째 날 일기(4-8~16)

박지환·2022년 3월 31일
0

Flask

연습문제

  • 작업의 기본순서
    ① 클라이언트와 서버연결 확인
    ② 서버부터 만들기
    ③ 클라이언트 만들기
    ④ 완성 확인하기
  1. 모두의 책리뷰 - POST 연습(리뷰 저장)

1) 클라이언트와 서버연결 확인

  • 만들어져 있는 API 정보

    	1. 요청 정보 :  요청 URL= /review , 요청 방식 = POST
    	2. 서버가 제공할 기능 :  클라이언트에게 정해진 메시지를 보냄
    	3. 응답 데이터  : (JSON 형식) 'result'= 'success',  'msg'= '리뷰가 성공적으로 작성되었습니다.'

<서버 코드(app.py)>

## API 역할을 하는 부분
@app.route('/review', methods=['POST'])
def write_review():
	# 1. 클라이언트가 준 title, author, review 가져오기.
	# 2. DB에 정보 삽입하기
	# 3. 성공 여부 & 성공 메시지 반환하기
    return jsonify({'result': 'success', 'msg': '리뷰가 성공적으로 작성되었습니다.'})

<클라이언트 코드(index.html)>

function makeReview() {
		// 1. 제목, 저자, 리뷰 내용을 가져옵니다.
		// 2. 제목, 저자, 리뷰 중 하나라도 입력하지 않았을 경우 alert를 띄웁니다.
		// 3. POST /review 에 저장을 요청합니다.
    $.ajax({
        type: "POST",
        url:  "/review",
        data: { },
        success: function (response) {
            if (response["result"] == "success") {
                alert(response["msg"] );
                window.location.reload();
            }
        }
    })
}
  • 동작 테스트
    '리뷰 시작하기' 버튼을 눌렀을 때, '리뷰가 성공적으로 작성되었습니다.' 라는 내용의 alert창이 뜨면 클라이언트 코드와 서버 코드가 연결 되어있는 것입니다.

2) 서버부터 만들기

  • API 는 약속이라고 했습니다. API를 먼저 만들어보죠!

API 기능은 다음 단계로 구성되어야 합니다.
1. DB에서 리뷰 정보 모두 가져오기
2. 성공 여부 & 리뷰 목록 반환하기

  • 만들 API 정보는 아래와 같습니다.

A. 요청 정보

  • 요청 URL= /review , 요청 방식 = GET
  • 요청 데이터 : 없음

B. 서버가 제공할 기능 : 데이터베이스에 리뷰 정보를 조회(Read)하고, 성공 메시지와 리뷰 정보를 응답 데이터를 보냄

C. 응답 데이터 : (JSON 형식) 'all_reviews'= 리뷰리스트

@app.route('/review', methods=['GET'])
def read_reviews():
    # 1. DB에서 리뷰 정보 모두 가져오기
    reviews = list(db.bookreview.find({}, {'_id': False}))
    # 2. 성공 여부 & 리뷰 목록 반환하기
    return jsonify({'all_reviews': reviews})

3) 클라이언트 만들기

  • API 는 약속이라고 했습니다. API를 사용할 클라이언트를 만들어보죠!

리뷰를 작성하기 위해 필요한 정보는 다음 세 가지 입니다.
→ 제목(title)
→ 저자(author)
→ 리뷰(review)

따라서 클라이언트 코드는 다음 세 단계로 구성되어야 합니다.
1. 리뷰 목록을 서버에 요청하기
2. 요청 성공 여부 확인하기
3. 요청 성공했을 때 리뷰를 올바르게 화면에 나타내기

  • 사용할 API 정보는 아래와 같습니다.

A. 요청 정보

  • 요청 URL= /review , 요청 방식 = GET
  • 요청 데이터 : 없음

B. 서버가 제공할 기능 : 데이터베이스에 리뷰 정보를 조회(Read)하고, 성공 메시지와 리뷰 정보를 응답 데이터를 보냄

C. 응답 데이터 : (JSON 형식) 'all_reviews'= 리뷰리스트

4) 완성 확인하기

  • 동작 테스트
    화면을 새로고침 했을 때, DB에 저장된 리뷰가 화면에 올바르게 나타나는지 확인합니다.
  1. 조각 기능 구현해보기

*API에서 수행해야하는 작업 중 익숙하지 않은 것들은, 따로 python 파일을 만들어 실행해보고, 잘 되면 코드를 붙여넣는 방식으로 하는 게 편리

▶ 기사URL만 입력했는데, 자동으로 불러와지는 부분은 meta태그를 크롤링해서 얻을 수 있음

1) meta 태그란?

<head></head> 부분에 들어가는, 눈으로 보이는 것(body) 외에 사이트의 속성을 설명해주는 태그들입니다. 

예) 구글 검색 시 표시 될 설명문, 사이트 제목, 카톡 공유 시 표시 될 이미지 등
(그 중 og:image / og:title / og:description 을 크롤링 할 예정)

*파이썬 코드가 접속했을 때 나오는 메타 태그 순서랑 브라우저 접속 메타코드 순서가 다르면 크롤링이 되지 않는다.
-> 메타 태그를 가져오는 방법이 다름

<크롤링 기본 코드>

import requests
from bs4 import BeautifulSoup

url = 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539'

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')

# 여기에 코딩을 해서 meta tag를 먼저 가져와보겠습니다.

<select_one을 이용해 meta tag를 먼저 가져온다>

og_image = soup.select_one('meta[property="og:image"]')
og_title = soup.select_one('meta[property="og:title"]')
og_description = soup.select_one('meta[property="og:description"]')

print(og_image)
print(og_title)
print(og_description)

<가져온 meta tag의 content를 가져온다>

url_image = og_image['content']
url_title = og_title['content']
url_description = og_description['content']

print(url_image)
print(url_title)
print(url_description)
  1. 마치며
    아직 익숙하지가 않다.
    따라해보면 어디에 뭘 넣는 건지 어렴풋이 알 것도 같지만 구조 이해가 부족하다.
profile
시작은 창대하나 끝은 미약하리라

0개의 댓글

관련 채용 정보