본문 바로가기

Project/Python

Blog project - Back_end

Blog project 

Back-end

 “Web Application”을 만드는 일은 다양한 기술의 조합으로 이루어집니다.  처음 이 일을 시작했던 때를 떠올려 보면 이 많은 것을 언제다 공부하나 하는 막막한 마음이 앞섰습니다. 방대한 양에 대한 두려움도 있었습니다. 하지만 몇년간 공부를 하다 보니 어느 정도 타협을 이루게 되었습니다. 아무리 공부를 해도 쏟아지는 새로운 기술을 모두 익히는 것은 저 같은 평범한 인간에게는 불가능에 가까운 일이기 때문입니다. 

 저의 한계를 인정하고 부터는 마음이 편해 졌습니다. 저는 컴퓨터 공학을 전공하지 않았고 이 일로 돈을 벌고 있는 것도 아니어서 그저 취미의 수준에서 즐기면서 프로젝트를 진행해 나갈 수 있었습니다.  이 글을 읽으 시는 분이 계시다면 역시 취미 수준의 개발능력을 염두에 두시고 실수가 있다면 댓글로 부족한 부분을 남겨 주시면 반영하여 다음 글을 쓰도록 하겠습니다. 

 백엔드를 구성하는 프레임워크는 Flask 를 사용했습니다. Flask  는 Phython을 사용하는 웹 프레임워크 입니다. Phython의 다른 웹 프레임워크로는 “django” 가 있습니다. “Flask” 보다 더 큰 규모의 서비스를 운영할때는 “django”를 사용하는 경우가 많습니다. 하지만 이런 학습용 프로젝트에 “django”를 사용하는 것은 자칫 취지에 어긋나는 경우가 발생할 수도 있습니다. 

 Flask 의 전체 코드는 다음과 같습니다. 

 

from flask import Flask, render_template, request
from post import Post
import requests

posts = requests.get("api_end_point").json()
post_objects = []
for post in posts:
post_obj = Post(post["id"], post["title"], post["subtitle"], post["body"], post["author"], post["image_url"],
post["date"])
post_objects.append(post_obj)

app = Flask(__name__)

@app.route('/')
def home():
return render_template("index.html", all_posts=post_objects)

@app.route('/about')
def about():
return render_template("about.html")


@app.route('/contact', methods=["GET", "POST"])
def contact():
return render_template("contact.html",)

@app.route('/post/<int:index>')
def show_post(index):
requested_post = None
for blog_post in posts:
if blog_post["id"] == index:
requested_post = blog_post
return render_template("post.html", post=requested_post)


if __name__ == "__main__":
app.run(debug=True)

 

 

 이 “코드”는 크게 네개의 route로 구성되어 있습니다. 쉽게 네개의 웹페이지를 갖고 있다고 볼 수 있습니다. 각각 “/“인 root route,  about route, contact route, post route. 입니다.  그리고 “python” 웹 프레임워크에서 자주 볼 수 있는 Decorator가 사용되어 있습니다. @app.route() 같은 표현식입니다. 이는 “django”에서도 자주 사용되는 표현식입니다. 함수에 특정한 기능을 더해주고 싶을때 주로 사용됩니다. 

 

posts = requests.get("api_end_point").json()
post_objects = []
for post in posts:
post_obj = Post(post["id"], post["title"], post["subtitle"], post["body"], post["author"], post["image_url"],
post["date"])
post_objects.append(post_obj)

 

 이 코드에서 가장 문제 되었던 것은  json 데이터를 읽는 부분이었습니다. 코드를 만들다 보면 당연하게 느껴지는 부분들이 잘 안되는 경우가 많습니다. 이 부분이 었습니다. 위 코드에서는  문제가 되었던  json 데이터 링크를 삭제 했습니다. 아마도 예제에서 사용되었던  json 코드를 읽어 들이는 지점에서 문제가 있었습니다. 굳이 이 데이터를 사용하지 않아도 되지만 예제를 최대한 반영하기 위해 위와 같이 리스트를 만들어서 반영했습니다. 

 

@app.route('/post/<int:index>')
def show_post(index):
requested_post = None
for blog_post in posts:
if blog_post["id"] == index:
requested_post = blog_post
return render_template("post.html", post=requested_post)

 

그외에 주목할 만한 지점은 마지막 라우트 인 post 라우트 입니다.   index 를  show_post 함수의 인수로 입력을 받습니다. 그리고 그 index 는 post 전체 데이터 에서 id  와 비교 하여 같은 값이 있을 경우 데이터를 가져 옵니다. 그리고 그 데이터를 기반으로  post  페이지를 만듦니다. 물론 이 코드에서는 데이터베이스를 아직 설치하기 전이기 때문에 예제 데이터를 사용하기 위해 만든 임시 코드 입니다. 물론 추후에 데이터베이스를 설치하고 데이터 양이 많아 진다면 위와 같은 코드를 그대로 사용하면 페이지 로딩에 문제가 생길 수도 있습니다. 

 

오늘은 간단한 블로그를 만들어 보면서 제가 배운 것들 공부한 것들을 정리 해 보았습니다. 다음에는  front-end 부분의 내용도 정리해보겠습니다. 

 

2021/02/01 - [Toy Project/Python] - Blog Project - Start

 

Blog Project - Start

Blog Project Start  안녕하세요 ? 저는 지성이라고 합니다. 한국에 살고 있는 평범한 직장인중 한명입니다. 저는 취미로 컴퓨터를 공부하고 있습니다.  “컴퓨터” 에도 다양한 분야가 있지만 저는

jisungsdevstroy.tistory.com

 

'Project > Python' 카테고리의 다른 글

Blog project - Database  (0) 2021.02.16
Blog project - GET/POST  (0) 2021.02.05
Blog project - Bootstrap  (0) 2021.02.04
Blog project - Front-end  (0) 2021.02.03
Blog Project - Start  (0) 2021.02.01