티스토리 뷰

python

Flask를 이용해서 python으로 웹페이지 생성

니냐니 ค^•ﻌ•^ค 2020. 6. 4. 12:29

 

Flask 로 웹 페이지 만들어보기

Flask는 파이썬을 위한 마이크로프레임워크이다 <아직 까지는 이해 못하는 개념이나.. 처음에는 이해해주자..>

알고 넘어가야 할 개념:
WSGI(Web Server Gateway Interface) : 서버가 웹 어플리케이션과 통신하기 위한 인터페이스

 

-- 파이썬 개발에는 필수적으로 가상개발환경을 만들라고 추천하고 있으니 가상개발환경도 설치해 준다

가상개발환경은 프로젝트마다 버전이 다른 프로그램을 다른 프로젝트에 영향을 주지 않고 독립적으로 개발을 할 수 있게 해준다.

<파이썬과 Flask를 이용하여 나만의 홈페이지나 웹앱을 만들어 보자.>

기본 설치 : 파이썬, Flask, 가상환경

개발환경설정:  

1. 가상환경

- pip install virtualenv

 

- virtualenv "프로젝트폴더명code =virtualenv venv

 대부분 가상환경 이름은 venv라고 한다해서, 우선 D: 디렉토리에 venv를 만들었다.

다른분꺼를 가져와서,, virtualenv 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. 

terminal에다가 위와같이 입력하면, localhost에 html로 출력 된다.

 

 

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
댓글