[Python 04] Flask Request, Redirect로 게시판 기능 구현

Bora Kwon·2022년 3월 31일
0

개발일지

목록 보기
7/14

Review

HTTP GET, POST 방식

GET은 요청을 전송할 때 요청 내용을 URL에 담아 전송하고, POST는 HTTP 메시지의 Body에 담아 전송한다. Flask에서 POST 방식을 사용하려면 해당 함수에 라우팅할 때 명시해주어야 한다. 기본은 GET만 처리하도록 설정되어 있다.

@app.route('/create_process/', methods=['POST'])
def create_process():
	return 'Success!'

methods에 GET, POST 둘 다 포함할 수도 있다.

Flask request, redirect를 사용한 create 기능 구현

from flask import request

위 코드로 flask의 request를 사용할 수 있다.
flask에서 제공하는 request는 form 태그로 넘어온 정보에 쉽게 접근할 수 있게 한다.

@app.route("/create_process/", methods=['POST'])
def create_process():
  global nextId
  title = request.form['title']
  body = request.form['body']
  newTopic = {"id":nextId, "title":title, "body":body}
  nextId = nextId + 1
  topics.append(newTopic)
  return redirect(f'/read/{nextId-1}')

POST 방식으로 넘어온 정보를 request.form['form 태그의 name']을 사용해 입력값을 받아올 수 있다.
create_process() 함수를 만들어 create 과정을 처리하도록 만들었는데,

global nextId

는 함수 밖에서 선언한 nextId 변수를 함수 내에서 변경하기 위해 필요한 구문이다. 접근은 가능하나 변경은 불가능하기 때문이다. (리스트의 경우는 내용 수정이 아닌 append, delete 등은 global 선언 없이 가능)

from flask import redirect

redirect도 Flask에서 지원하는데, 페이지를 다른 곳으로 연결해주는 함수다.

@app.route("/create_process/", methods=['POST'])
def create_process():
  global nextId
  title = request.form['title']
  body = request.form['body']
  newTopic = {"id":nextId, "title":title, "body":body}
  nextId = nextId + 1
  topics.append(newTopic)
  return redirect(f'/read/{nextId-1}')

create 버튼을 누른 후 create_process를 진행하고 마지막에 /read/방금입력한내용의id/를 매개변수로하는 redirect 함수를 return 하면, /read/id/에 라우팅된 함수를 찾아간다.

Delete 기능 구현

@app.route('/delete/<int:num>/')
def delete(num):
  for topic in topics:
    if(num==topic['id']):
      topics.remove(topic)
      break
  return template(f'<h2>Delete Succeeded</h2>Content number {num} deleted.')

/delete/id번호/ 로 호출했을 때 해당 게시물을 삭제하도록 구현했다.

SQLite 시작하기

Glitch에는 SQLite가 내장되어 있어 바로 사용할 수 있다. Glitch 터미널에서 다음과 같이 입력하면

sqlite3

sqlite3로 입장하여 다음 명령어를 사용해 데이터베이스 파일을 만들 수 있다.

.open topics.sqlite3

그리고 sqlite에서 나오려면

.exit

을 입력하면 된다.
다시 다음 명령어로 topics.sqlite3 파일로 SQLite를 실행하면

sqlite3 topics.sqlite3

이제 topics.sqlite3 파일을 사용해 데이터베이스를 구성할 수 있다.

CREATE TABLE topics (
    id    INTEGER PRIMARY KEY,
    title TEXT    NOT NULL,
    body  TEXT
);

CREATE 명령어로 테이블을 생성하고, INSERT 명령어로 데이터를 추가할 수 있다.

INSERT INTO topics ('title', 'body') VALUES ('SQLite', 'SQLite is ...')

? Question

Flask를 활용한 Python으로 웹 페이지를 만들 때 HTML과 JavaScript 문법까지 한 번에 다루니 헷갈리고 실수하는 부분들이 종종 있다.

! Answer

익숙해지는 수밖에...

Comment

초보가 접근하기 쉬운 것들로 교육 과정을 구성해서 간단하면서도 개념을 이해하기가 좋다. Django 대신 Flask, MySQL 등 다른 데이터베이스 대신 SQLite를 사용하여 실습 시간과 난이도는 줄이고 전체적인 흐름은 이해하기 좋게 만들었다. 내일이면 데이터베이스를 연동해서 웹사이트를 만들 수 있다니, 기대가 된다.

profile
Software Developer

0개의 댓글