티스토리 뷰
Flask 로 웹 페이지 만들어보기
Flask는 파이썬을 위한 마이크로프레임워크이다 <아직 까지는 이해 못하는 개념이나.. 처음에는 이해해주자..>
알고 넘어가야 할 개념:
WSGI(Web Server Gateway Interface) : 서버가 웹 어플리케이션과 통신하기 위한 인터페이스
-- 파이썬 개발에는 필수적으로 가상개발환경을 만들라고 추천하고 있으니 가상개발환경도 설치해 준다.
가상개발환경은 프로젝트마다 버전이 다른 프로그램을 다른 프로젝트에 영향을 주지 않고 독립적으로 개발을 할 수 있게 해준다.
<파이썬과 Flask를 이용하여 나만의 홈페이지나 웹앱을 만들어 보자.>
기본 설치 : 파이썬, Flask, 가상환경
개발환경설정:
1. 가상환경
- pip install virtualenv
- virtualenv "프로젝트폴더명" code =virtualenv venv
대부분 가상환경 이름은 venv라고 한다해서, 우선 D: 디렉토리에 venv를 만들었다.
3. pip install Flask
나의 서버가 될 위치는 D: 이고, 여기다가 venv라는 가상환경을 만들었다. 그 다음, flask로 python을 html로 출력하기 위해 아래와 같은 코드를 입력시키고, hello.py를 실행 시키자.
1.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
2.
PC에서 실행해서 위 그림과 같이 나온다. 다른 서버시스템이나 라즈베리파이에서도 마찬가지다. 로컬호스트로 실행되었다. 다른 PC에서는 접속이 안된다. 파일을 실행한 같은 시스템에서 웹브라우저를 열어서 접속해 보자. http://127.0.0.1:5000/ 이나 http://localhost:5000/으로 접속하면 된다.
캡처 화면과 같이 브라우저 화면에 Hello World가 출력이 된다. 성공적으로 시작되었다.
물론 나중에는 다른 PC나 외부에서도 접속이 가능하도록 만들것이다. 포트 역시 변경이 가능하다. 기본 포트는 5000을 사용한다.
PC와 라즈베리파이를 같이 생각하면서 작성할려니 혼란스럽지만 공유기가 도착하면 라즈베리파이에서 본격적으로 작업해 보기로 하자.
지금까지 해온 익숙한 html 파일을 작성해 보자.
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def hello():
#return "Hello World!"
#return "<html><body><h1>Hello World!</h1></body></html>"
return render_template('hello.html')
if __name__ == "__main__":
app.run(debug=True)
이렇게 작성하면 html 태그를 사용할 수 있다. 간단한 것은 가능하지 몰라도 복잡한 html 문서를 다 이렇게 작성할수는 없다
개발단계에서 이렇게 해주면 자동으로 수정된 코드를 리로드해 준다. 편하다. 하지만 실제 서비스를 할때는 삭제해 줘야 한다는 것 같다. 에러 메세지가 접속자에게 노출 될 수 있다.
웹브라우저로 접속하면 캡처 화면처럼 동일한 결과가 나온다. 이제 이 html파일을 원하는 모양으로 꾸면 된다. template가 단순히 이 것을 목적으로만 하지는 않지만 가단히 이렇게 사용이 가능하다.
다음으로 위와같이 했을 때 template문제가 생긴다.
jinja2.exceptions.TemplateNotFound 해결법
누군가 친절히 링크를 해놨다.
http://flask.pocoo.org/docs/0.12/quickstart/#rendering-templates 로 들어가서 해결해보셈 이라며!
Flask will look for templates in the templates folder. So if your application is a module, this folder is next to that module, if it’s a package it’s actually inside your package:
Case 1: a module:
/application.py
/templates
/hello.html
Case 2: a package:
/application
/__init__.py
/templates
/hello.html
라는 내용이 바로 보인다. 읽어보면 templates 폴더를 생성해서 안에 적용할 template를 넣으라는 것이다.
저 케이스를 나에게 적용하면
/homepage 라는 폴더안에.
/hello.py 를 만들고,
homepage폴더 안에 /templates 라는 폴더 생성후 그 안에
hello.html 를 만들라는 얘기.
사용한 코드
hello.py에는
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def hello():
#return "Hello World!"
#return "<html><body><h1>Hello World!</h1></body></html>"
return render_template("hello.html")
if __name__ == "__main__":
app.run(debug=True)
hello.html 에는
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Ssu's world</title>
</head>
<body>
<h1>Hello world! - 이제 시작입니다.</h1>
<img src="ratta.jpg" width="300">
</body>
</html>
사진 추가는 또다른 경로 설정이 필요하다.
static폴더는 정해진 것으로 나중에 사용할 것이기 때문에 일단은 만들어서 놓고 그곳에 img란 폴더도 만들고 이미지를 저장하고 경로를 지정해 주었다.
이미지도 잘 표현이 된다. 다른 부분은 수정할 필요가 없이 html 파일만 수정해서 저장하면 끝이다.
즉, 템플릿은 코드와 유저인터페이스를 분리해 주는 역활을 한다. Flask는 Jinja2 템플릿 엔진을 사용한다.
'python' 카테고리의 다른 글
virtualenv 생성 시에 발생하는 오류들 정리 (0) | 2020.06.05 |
---|
- Total
- Today
- Yesterday
- 매개변수
- 비트나미
- python함수1
- debug = True
- 외부에서 접속
- host="0.0.0.0"
- mysql 사용방법
- 개방하는 포트
- Flask
- 포트 forwarding
- jinja2 exception TemplateNotFound
- 심폐소생술 자격증
- 인수
- 기본구조
- 인코딩
- flask 이용해서 virtualenv를 작동 시키기.
- 결괏값
- 포트 포워딩
- 포트
- virtualenv
- bitnami
- 파일 입출력
- BLS
- 하트세이버
- flask importerror
- bls provider
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |