티스토리 뷰

우리는 컴퓨터가 한 대이다. 그래서 같은 컴퓨터에다 서버도 만들고, 요청도 할 것이다. 즉, 클라이언트가 = 서버가 되는 것이다. => 이런 것을 바로 로컬 개발환경 이라고 한다. 

 

사용 IDE: 파이참 

flask가 뭔가요?

Flask 프레임워크: 서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있다. (서버를 직접 구현하는 것은 매우 복잡하고 어려움, 프레임워크를 쓰지 않으면 태양초를 빻아서 고추장을 만드는 격)

 

flask 시작하기

  • 우선 새로운 프로젝트를 만들고 내가 만든 폴더로 경로를 지정해줍니다. (venv가 제대로 생겼는 지 확인)
  • 새로 만든 프로젝트에 flask 패키지를 설치해줍니다. (win의 경우, file -> setting -> project -> Python interpreter)
  • flask 패키지 검색명: flask
  • app.py 파일을 만들어 flask 시작 코드를 붙여넣어준다. 
# flask 시작 코드는 아래와 같습니다. 
from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
   return 'This is Home!'

@app.route('/mypage')
def mypage():
   return 'This is myPage!'

if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)
파일 이름은 app.py가 아니여도 상관은 없지만, 통상적으로 flask서버를 돌리는 파일은 app.py라고 작명합니다.

위의 파일을 파이참으로 실행(run)해보면 빨간색으로 표시된 안내문구를 볼 수 있다. (빨간색이라 오류난 줄 알았음;)

읽어보면 내가 지정한 port5000에 구동중이라는 내용이다. 

 

chrome에서 localhost:5000/으로 접속해봅시다.  'This is Home'이라는 내용이 보이면 성공!


😓파이참 프로세스 종료(=app.py파일 실행 정지)시 단축키 이슈

서버 종료: 터미널 창에서 ctrl + c  
단, 서버 실행 역시 터미널 창에서 하고 종료도 터미널 창에서 해야 함
실행 명령어:
python app.py

*저는 세팅에서 기본 터미널을 cmd -> git bash로 변경했습니다. 
파이참 실행창에서는 ctrl + c단축키가 복사기능을 하기 때문에 ctrl + c가 먹질 않더군요 
프로세스 종료를 해서 서버연결을 끊고싶은데.. 흠 구글링을 해도 정확한 해답은 아니지만 파이참 실행창에서 ctrl +F2를 하면 app을 중지해줍니다. 


🐱‍👤Flask 세팅 - HTML 파일 주기

  • 기본 폴더 구조: 항상 아래와 같이 세팅하고 시작해야 합니다. 
주의 2가지:
1)기존에 있던 venv는 절대 건들지 말 것(얘는 그냥 없는 애라고 칩시다.)
2)폴더를 만들 때 templates라는 폴더명에 오타가 없이 만들어야 제대로 작동합니다.
(맞음 제가 templetes 라고 썼다가 내부에 있던 index.html을 가져오지 못했음^^)
Flask 서버를 만들 때, 항상, 프로젝트 폴더 안에,
ㄴstatic 폴더(이미지, css파일 등 정적인 데이터를 담아둡니다.)
ㄴtemplates 폴더(html파일을 넣어둡니다)
ㄴapp.py 파일

이런 폴더 구조가 되겠죠?

 

index.html 파일을 templates 폴더 안에 만들어줍니다. 

내용물을 확인용으로 대충 만들어주세요

 

▶flask 내장함수 render_template 를 이용해서 index.html 파일을 불러오기

 

app.py

from flask import Flask, render_template
#당연히 render_template를 임포트해야 합니다.

app = Flask(__name__)


@app.route('/')
def home():
    return render_template('index.html') #render_template함수로 index.html가져옴
    
if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

🐱‍👤Flask 시작하기 - API 만들기

은행의 창구가 API와 같다고 했던 것을 기억하세요. 
같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라 처리하는 것이 다른 것처럼

클라이언트가 요청할 때에도, '방식'이 존재한다.
HTTP라는 통신 규약을 따른다. 클라이언트는 요청할 때 HTTP request method(요청 메소드)를 통해, 어떤 요청 종류인지 정보를 알려주는 것 to 응답하는 서버 쪽에! 

흔히 쓰이는 2가지 방식: GET, POST

<GET>

  • 통상적으로 데이터 조회(Read)를 요청할 때 사용 -> 즉 클라이언트가 정보를 서버에서 받아와서 화면에 표시할 때 GET사용 
  • 데이터 전달: URL 뒤에 물음표를 붙여 key=value로 전달 → e.g) google.com?q=북극곰

<POST>

  • 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때 → e.g.) 회원가입, 회원탈퇴, 비밀번호 수정
  • 데이터 전달 : 바로 보이지 않는 HTML body에 key : value 형태로 전달

🐱‍👤예시통해 알아보기

 

 

✅index.html - GET 요청 Ajax코드 (클라이언트쪽)

  • ajax통신은 jQuery가 필요하니 head쪽에 jQuery CDN을 넣어줍니다. 
  • 아래의 코드는 script 태그를 하나 더 생성하여 넣어준 것

▶GET

//GET 요청 확인 Ajax코드  
$.ajax({
    type: "GET",
    // 슬래쉬test라는 창구에 가는데 title_give라는 이름으로 봄날은 간다라는 데이터를 내가 갖고 감
    // 창구에 주민번호 000-0000라는 정보를 가지고 내가 갈게와 같은 맥락
    url: "/test?title_give=봄날은간다",
    data: {},
    success: function (response) {
    // 만약 통신이 성공적으로 됐다면 너가 준 정보를 내가 콘솔에 출력할게! 라는 의미
        console.log(response)
    }
})

▶POST

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

 

✅app.py - GET요청 API코드 (서버쪽 // flask를 통해서 서버 통신 중)

 

▶GET

# request, jsonify 임포트해야 합니다. 

#/test창구에서 데이터를 받아왔음 라는 의미
@app.route('/test', methods=['GET'])
def test_get():
	#title_give라는 이름으로 뭔가를 받아와서 변수에 담고 걔를 찍어줬음
    title_receive = request.args.get('title_give')
    print(title_receive)
    return jsonify({'result': 'success', 'msg': '이 요청은 GET!'})

-> 예시에서는 GET요청을 통해서 데이터를 가져오는데 통상적으로 POST요청에서 데이터를 많이 가져가게 된다. 

 

▶POST

# /test라는 창구를 만들었고 POST만 받는 것은 이쪽으로와라
# 같은 /test창구지만 GET을 받으면 저쪽으로 가라
@app.route('/test', methods=['POST'])
def test_post():
    title_receive = request.form['title_give']
    print(title_receive)
    return jsonify({'result': 'success', 'msg': '요청을 잘 받았어요! POST '})

 

 


🐱‍👤새 프로젝트 만들 때  설치 패키지

▶필수 패키지 3가지 

  • flask // 서버 구축 프레임워크 
  • dnspython // pymongo를 사용하기 위해서 dnspython을 설치해야 한다. 아틀라스 URL 서식을 위해 
  • pymongo // DB연결
# 아래가 바로 아틀라스 서식(mongoDB, 즉 아틀라스와 내 application와의 연결을 위해서 사용하는 URL임) 
mongodb+srv://test:<password>@cluster0.dod88.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
# test:<password> 와 myFirstDatabase 부분은 예시코드이 내가 설정해 놓은 것으로 변경해야하는 정보이다.
# test는 아이디 <password>는 아이디에 해당하는 비밀번호 myFirstDatabase은 내 데이터베이스명을 채워넣으면 된다.

 

dnspython에서 급 궁금해진 정보 ▼
Q. DNS란 무엇입니까?
- 도메인 이름 시스템(DNS, Domain Name System)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다. 
- 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다.

+++크롤링을 하게 된다면 2개 추가

  • requests 
  • bs4 ( beautifulsoup )

🐱‍👤프로젝트 구현 시 체크사항

어떻게 만들 지 파악한다

  1. 서버 구현
  2. 클라이언트 구현
  3. 확인

 

▶예시

POST 연습(포스팅하기) , 서버측 구현

  1. 요청 정보: URL = /movie, 요청 방식 = POST
  2. 클라(ajax)-> 서버(flask): url, star, comment
    • 서버 측에서는 클라에서 받은 url데이터를 가지고 image, title, description/ star / comment 데이터를 DB에 저장한 뒤 완료해주면 된다.
  3. 서버(flask) -> 클라(ajax): 메세지를 보냄 (포스팅 완료!) 

GET 연습(보여주기), 클라측 구현 

(*API 만들고 사용하기 - 보여주기API(Read -> GET)

  1. 요청 정보: URL = /movie, 요청 방식 = GET
  2. 클라(ajax) -> 서버(flask): (없음) // get방식이니 클라측에 가져갈 데이터 필요 x
  3. 서버(flask) -> 클라(ajax) : 전체 영화를 보내주기

 

댓글