본 작업은 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만큼 올라가는걸 확인할 수 있습니다.

 

이런 원리로 원하는 기능들을 추가하실 수 있습니다.

 

 

 

+ Recent posts