플라스크 2

Namung's Sea·2021년 10월 27일
0
post-thumbnail

플라스크 기초

https://velog.io/@namung/flask 이어서
1. $ tree 가상 환경이 활성화 된 상태에서 내부 구조를 확인해보자!
2. hello.py 코드를 작성해보자.

from flask import flask

app = Flask(__name__)

@app.route('/index')          #url경로
@app.route('/')
def hello_world():
    return 'Hello, World!'
  1. $ export FLASK_APP=hello.py
    $ export FLASK_ENV=development


static 변하지 않는 것.
js 자바스크립트
templates 웹사이트에서 유저들이 보는 부분
https://flask.palletsprojects.com/en/2.0.x/

  1. $ flask run 시행후 사진 속 http://127.0.0.1:5000/ url을 클릭 해 열어보자. 웹 서버가 정상적으로 열렸음을 알 수 있다.

  1. $flask run --host=0.0.0.0 --port=5000을 지정해 시행하면 공인 IP로 접근하여 외부 접속을 허락할 수 있다. 포트 넘버 변경도 가능하다.

path parameter 설정

path parameter 설정을 위한 코드를 작성해보자. 파일명 hello.py는 그대로 두고 내용만 수정해보겠다.

from flask import Flask

app = Flask(__name__)

@app.route('/users/<username>')
def get_user(username):
    return username

@app.route('/posts/<int:post_id>')
def get_post(post_id):
    return str(post_id)

@app.route('/uuid/<uuid:uuid>')
def get_uuid(uuid):
    return str(uuid)

이제 다시 $ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run 을 시행해보자.
이후 아래 사진에서 빨간 줄친 부분 url을 열어보자.

그럼 아래사진처럼 나오는데 여기서 url부분을 수정해주어야한다. path parameter를 지정해주어야 하는 것.

↑ path parameter를 지정하지 않은 사진.

아래 사진은 모두 지정한 사진이다. 노란색 형관펜으로 체크한 부분을 입력 후 엔터를 눌러 어떤 변화가 일어나는지 관찰해보자.

error

4번 부분에서 처음에 flask run코드를 넣고 창을 열어보니 위 사진 속 처럼 제대로 나오지 않고 코드 작성에서 에러가 발생했다고 에러를 표시해주는 화면이 나왔다. 알고보니 hello.py에서 오타가 발생한 것. 오타를 수정하고 다시 flask run을 해주었더니 이게 뭔가.

* Serving Flask app "hello.py" (lazy loading)
 * Environment: development
 * Debug mode: on
Traceback (most recent call last):
  File "/home/pi/.local/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/home/pi/.local/lib/python3.7/site-packages/flask/cli.py", line 967, in main
    cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
  File "/home/pi/.local/lib/python3.7/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/click/decorators.py", line 84, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/home/pi/.local/lib/python3.7/site-packages/flask/cli.py", line 860, in run_command
    extra_files=extra_files,
  File "/usr/local/lib/python3.7/dist-packages/werkzeug/serving.py", line 984, in run_simple
    s.bind(server_address)
OSError: [Errno 98] Address already in use

이와 같은 에러 코드가 잔뜩 떴다. 마지막 OSError를 보면 알 수 있는데 address가 이미 사용중에 있다고 한다. 가만 생각해보니 이전에 flask run 이후 정상종료하지 않고 ctrl+z로 강제종료 했던 것이 원인이었다. 이렇게 강종하고 나면 이전 flask가 아직 port 5000번을 사용하고 있음을 알 수 있었던 귀한 배움의 시간이었다.

어떻게 5000번 포트를 사용하는지 확인하나면, 바로 lsof 명령어를 사용하는 것이다.

lsof 란?

  • 프로세스를 확인하고 종료할수 있다.
  • 터미널에서 활성화된 프로세스 리스트를 출력해주는 명령어이다.
  • -i 옵션을 사용하면 특정 포트를 사용중인 프로세스만을 보여준다.

$ sudo lsof -i :5000를 입력하고 확인해보자.

문제가 되는 이전 flask가 프로세스가 구동 중임을 확인할 수 있다. 이녀석의 PID
(Process identifier)는 1474! kill 명령어를 사용해 이녀석을 없애주자. '-9'는 kill의 강제 종료 시그널인 9번을 사용한다는 의미이다.
$ sudo kill -9 1474
이제 loaf 명령어를 사용해보면 flask run 이 없어졌음을 확인할 수 있다(위 사진에서 확인!).

윈도우에서 가상환경 구축(아나콘다 이용)

먼저 관리자 모드로 시행.

> conda activate tf
> conda env list    #base가 기본 환경!

이후 내용 참고하기
윈도우에서 가상환경 구축

profile
개발자로 시작| 공부한 것을 기록합니다.

0개의 댓글