본문 바로가기
스파르타/웹개발

22.02.04 서버와 클라이언트 개념, Python Library (flask, bs4, requests, pymongo), 기본 폴더 구조 세팅, GET & POST

by h.단디 2022. 2. 6.

서버와 클라이언트의 개념

 

- 서버 : 네트워크로 연결된 컴퓨터 중 데이터를 제공하는 쪽

- 클라이언트 : 서버에 데이터를 요청하고 받아 사용하는 쪽 

우리는 같은 컴퓨터에 서버를 만들고 요청도 함. 클라이언트 =서버  "로컬 개발환경"

https://better-together.tistory.com/60

 

쉽게 이해하는 네트워크 4. 서버, 클라이언트와 웹 서비스 (ft. 비즈니스 로직과 사용자 인터페이

서버와 클라이언트의 정의 및 서버의 종류 IT란? IT의 핵심은 ① 네트워크를 통해 ② 컴퓨터와 컴퓨터가 데이터를 주고받는 것입니다. IT에 대해 자세히 → IT란? 네트워크의 구성 포스팅에서 살펴

better-together.tistory.com

 

Python Library

- Flask : (프레임워크) 서버를 구동시켜주는 편한 코드 모음. like jquery, 부트스트랩처럼 남이 짜놓은거 걍 갖다 쓰는거임.

from flask import Flask
app = Flask(__name__)

@app.route('/')                              #('/)로 URL을 나눌 수 있음.
def home():
   return 'This is Home!'

@app.route('/mypage')                        #url별로 함수명이 같거나 route('/')내의 주소가 같으면 안됨.
def mypage():  
   return 'This is My Page!'

if __name__ == '__main__':  
   app.run('0.0.0.0',port=5000,debug=True)

- requests : API로부터 데이터 .GET / .POST / .PUT / .DELETE 등등 가능    (.GET, .POST 방식이 가장 자주 쓰임)

import requests # requests 라이브러리 설치 필요

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

print(rjson['RealtimeCityAir']['row'][0]['NO2'])

 

- bs4(beautiful soup) : 크롤링할 때 쓰임. 이전에 써봤지?

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
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('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

 

- pymongo : mongoDB 를 사용하기 위해 필요함. 기본 코드 & 주 기능 요약

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

 

파이참 기본 세팅

- new project 생성시 : venv 폴더 생성 확인

- app.py : 아무 이름으로 해도 되긴하지만, 보통 flask 서버 돌리는 파일은 app.py라고 이름지음. 대세를 따르자.

- static 폴더 : 이미지, css 파일 들어감

- templates 폴더 : html 파일 들어감

- index.html : 기본 골격

from flask import Flask, render_template       #render_template 하면 templates 폴더에 있는 html이 불려옴!
app = Flask(__name__)

## URL 별로 함수명이 같거나,
## route('/') 등의 주소가 같으면 안됩니다.

@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 POST
통상적으로 데이터 조회(Read) 요청할 때 통상적으로 데이터 생성(Creat), 변경(Update), 삭제(Delete) 요철 할 때
URL뒤에 물음표 붙여서 key=value 로 전달
(ex : google.com?q=북극곰)
바로 보이지 않는 HTML body에 key:value형태로 전달

- GET 요청 API코드

@app.route('/test', methods=['GET'])                 #/test라는 URL에서 GET할건데
def test_get():                                      #함수 이름은 test_get이야
   title_receive = request.args.get('title_give')    #title_give라는 인수를 요청해서 받은 값을 title_receive라고 할게
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 GET!'})     #잘 실행됐으면 메세지 띄워줘

- GET 요청 확인 Ajax코드

$.ajax({
    type: "GET",                            
    url: "/test?title_give=봄날은간다",           // /test 라는 URL에 '봄날은간다'라는 인수로 GET요청할거거든?
    data: {},
    success: function(response){                  // 성공하면 콘솔찍어줘
       console.log(response)
    }
  })

- POST 요청 API코드

@app.route('/test', methods=['POST'])             #/test라는 URL에 POST 요청할건데               
def test_post():                                  #함수 이름은 test_post라고 할게
   title_receive = request.form['title_give']     #title_give라는 변수를 받아서 나온 값을 title_receive라고 할거니까
   print(title_receive)                           #title_receive 값좀 찍어봐
   return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

- POST 요청 확인 Ajax코드

$.ajax({
    type: "POST",
    url: "/test",                           // /test라는 URL에 POST할거거든?
    data: { title_give:'봄날은간다' },      // '봄날은간다'라는 인수로 데이터 줄게
    success: function(response){
       console.log(response)                // 성공하면 값 콘솔찍어라잉
    } 
  })