본 작업은 Cetnos7.5 & Python 3.7.2 & pip 19.3.1 에서 진행되었습니다.
[ 다루는 내용 ]
$ pip install Flask
$ vim app.py
$ vim app_test.py
1. Flask 설치
$ pip install Flask
2. flask 서버 관리용 파일 생성
$ vim app.py
====================================================
from flask import Flask
app = Flask (__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
====================================================
from flask import Flask
app = Flask (__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
참고로, app.run에서 host 설정은 모든 IP에 대한 접근은 허용한다는 의미, port 설정은 접속시 open될 http port입니다.
host 설정 미기재시, localhost(=127.0.0.1)에서만 접근 가능합니다. 아마 직업 host 설정을 수정해주도록 만들어둔 이유는 모든 IP에 오픈되었다가 보안적으로 문제가 발생할 수 있어서 관리자가 직접 만지도록 해준 것 같습니다.
port 설정 미기재시, 기본적으로 5000번 포트로 세팅됩니다. 다른 데몬의 포트와 겹치지 않으면 어떤 수치든 문제되지 않습니다.
3. 서버 실행
$ python app.py
세션을 하나 새로 열어서 app.py 실행시킨 세션은 로그 모니터링 용으로 사용합니다.
4. app.py 수정, json TEST
$ vim app.py
====================================================
from flask import Flask, jsonify
app = Flask (__name__)
@app.route('/')
def home():
return jsonify(text='Hello, world')
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
====================================================
from flask import Flask, jsonify
app = Flask (__name__)
@app.route('/')
def home():
return jsonify(text='Hello, world')
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
5. 응용 실습 1 : 조회수 예시 >>> app.py 수정
$ vim app.py
====================================================
from flask import Flask, jsonify
count = 0
app = Flask (__name__)
@app.route('/')
def home():
global count
count += 1
return jsonify(
text='Hello, world',
count=count
)
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
====================================================
from flask import Flask, jsonify
count = 0
app = Flask (__name__)
@app.route('/')
def home():
global count
count += 1
return jsonify(
text='Hello, world',
count=count
)
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
6. 응용 실습 1 : 조회수 예시 >>> app_test.py 수정
$ vim app_test.py
====================================================
from app import app
import pytest
# app.test_client를 반복사용하지 않아도 되도록 하기 위해 함수로 설정
# client = app.test_client() 와 동일함
@pytest.fixture
def client():
return app.test_client()
# 클라이언트의 요청 내용을 받기 위한 부분
# 이 부분도 여러번 불필요하게 하지 않아도 되도록 함수로 설정
def do_get(client, path):
response = client.get(path)
return response.status_code, str(response.data), response.get_json()
# 메인 로직
def test_home(client):
status_code, body, data = do_get(client, '/')
old_Count = data['count']
assert status_code == 200
assert '"text":"Hello, world"' in body
for i in range(5):
status_code, body, data = do_get(client, '/')
new_Count = data['count']
assert status_code == 200
assert new_Count == old_Count + i + 1
====================================================
from app import app
import pytest
# app.test_client를 반복사용하지 않아도 되도록 하기 위해 함수로 설정
# client = app.test_client() 와 동일함
@pytest.fixture
def client():
return app.test_client()
# 클라이언트의 요청 내용을 받기 위한 부분
# 이 부분도 여러번 불필요하게 하지 않아도 되도록 함수로 설정
def do_get(client, path):
response = client.get(path)
return response.status_code, str(response.data), response.get_json()
# 메인 로직
def test_home(client):
status_code, body, data = do_get(client, '/')
old_Count = data['count']
assert status_code == 200
assert '"text":"Hello, world"' in body
for i in range(5):
status_code, body, data = do_get(client, '/')
new_Count = data['count']
assert status_code == 200
assert new_Count == old_Count + i + 1
7. 응용 실습 2 : 조회수 뻥튀기 예시 >>> app.py 수정
$ vim app.py
====================================================
from flask import Flask, jsonify
count = 0
app = Flask (__name__)
@app.route('/')
def home():
global count
count += 1
return jsonify(
text='Hello, world',
count=count
)
@app.route('/abuse')
def abuse_count():
global count
count += 100
return ''
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
====================================================
from flask import Flask, jsonify
count = 0
app = Flask (__name__)
@app.route('/')
def home():
global count
count += 1
return jsonify(
text='Hello, world',
count=count
)
@app.route('/abuse')
def abuse_count():
global count
count += 100
return ''
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True)
8. 응용 실습 2 : 조회수 뻥튀기 예시 >>> app_test.py 수정
vim app_test.py
====================================================
from app import app
import pytest
# app.test_client를 반복사용하지 않아도 되도록 하기 위해 함수로 설정
# client = app.test_client() 와 동일함
@pytest.fixture
def client():
return app.test_client()
# 클라이언트의 요청 내용을 받기 위한 부분
# 이 부분도 여러번 불필요하게 하지 않아도 되도록 함수로 설정
def do_get(client, path):
response = client.get(path)
return response.status_code, str(response.data), response.get_json()
# 메인 로직
def test_home(client):
status_code, body, data = do_get(client, '/')
old_Count = data['count']
assert status_code == 200
assert '"text":"Hello, world"' in body
for i in range(5):
status_code, body, data = do_get(client, '/')
new_Count = data['count']
assert status_code == 200
assert new_Count == old_Count + i + 1
def test_abuse(client):
status_code, body, data = do_get(client, '/')
old_Count = data['count']
assert status_code == 200
status_code, _, _ = do_get(client, '/abuse')
assert status_code == 200
status_code, body, data = do_get(client, '/')
new_Count = data['count']
assert status_code == 200
# 100을 더 추가로 올려주기
assert new_Count == old_Count + 1 + 100
====================================================
from app import app
import pytest
# app.test_client를 반복사용하지 않아도 되도록 하기 위해 함수로 설정
# client = app.test_client() 와 동일함
@pytest.fixture
def client():
return app.test_client()
# 클라이언트의 요청 내용을 받기 위한 부분
# 이 부분도 여러번 불필요하게 하지 않아도 되도록 함수로 설정
def do_get(client, path):
response = client.get(path)
return response.status_code, str(response.data), response.get_json()
# 메인 로직
def test_home(client):
status_code, body, data = do_get(client, '/')
old_Count = data['count']
assert status_code == 200
assert '"text":"Hello, world"' in body
for i in range(5):
status_code, body, data = do_get(client, '/')
new_Count = data['count']
assert status_code == 200
assert new_Count == old_Count + i + 1
def test_abuse(client):
status_code, body, data = do_get(client, '/')
old_Count = data['count']
assert status_code == 200
status_code, _, _ = do_get(client, '/abuse')
assert status_code == 200
status_code, body, data = do_get(client, '/')
new_Count = data['count']
assert status_code == 200
# 100을 더 추가로 올려주기
assert new_Count == old_Count + 1 + 100
9. 응용 실습 2 확인하기
$ curl localhost:5001
$ curl localhost:5001/abuse
abuse로 호출 이후에 100만큼 올라가는걸 확인할 수 있습니다.
이런 원리로 원하는 기능들을 추가하실 수 있습니다.