플라스크 2
플라스크 기초
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!'
$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
static 변하지 않는 것.
js 자바스크립트
templates 웹사이트에서 유저들이 보는 부분
https://flask.palletsprojects.com/en/2.0.x/
$ flask run
시행후 사진 속 http://127.0.0.1:5000/ url을 클릭 해 열어보자. 웹 서버가 정상적으로 열렸음을 알 수 있다.
$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가 기본 환경!
이후 내용 참고하기
윈도우에서 가상환경 구축
Author And Source
이 문제에 관하여(플라스크 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@namung/플라스크-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)