[7일차] Flask, Sqlite3

1. 학습내용

create 페이지 생성

GET방식 → POST 방식 변경

  • create 했을 때 GET 방식을 POST 방식으로 바꾸기
@app.route("/create/")
def create():
    content = '''
        <form action="/create_process/" method="POST">
            <p><input type="text" name="title" placeholder="title"></p>
            <p><textarea name="body"placeholder="body"></textarea></p>
            <p><input type="submit" value="create"></p>
        </form>
    '''
    return template(content)
  • title과 body를 추가하고나면 /create_process/로 이동한다.
    이 때 id는 자동증가 되도록 nextId 변수를 만들어서 global로 선언한다.
    nextId는 뒤에 nextId = 4로 이미 선언되어 있음.
@app.route('/create_process/', methods=['POST'])
def create_process():
    global nextId
    getTitle = request.form['title']
    getBody = request.form['body']
    newTopic = {"id":nextId, "title":getTitle, "body":getBody}
    topics.append(newTopic)
    nextId = nextId + 1

    return redirect(f'/read/{nextId-1}/')

GET방식, POST방식

  • GET 방식 : URL에 데이터를 포함시켜 전송하고, URL에 노출되어 보안에 취약하다.
  • POST 방식 : URL에 노출하지 않고 전송하고 데이터를 Body에 포함시킨다.

request

  • request.args
    URL 쿼리 문자열의 키/값 쌍을 받아올 수 있다.
    GET 방식에서만 사용이 가능하다.

  • request.form['title']
    POST 메서드의 경우 데이터를 주고 받을 때 body안에 들어가기 때문에 form에서 데이터를 전송한다.
    데이터를 받을 때 request.form['key'] 형식으로 데이터를 받으면 된다.

  • 그 밖에도
    request.data
    request.files
    request.values
    request.json 등이 있다.

redirect

라우팅되어 페이지로 이동했을 때 return에 redirect(주소)로 이동한다.
Flask 공식홈페이지 예제

@app.route('/')
def index():
    return redirect(url_for('login'))

delete 페이지 생성

id를 받아와서 반복문을 통해 id가 topic의 id와 일치하면 topics에서 remove한다.
delete가 끝나면 메인으로 다시 이동하게 만들었다.

@app.route("/delete/<int:id>/", methods=['POST'])
def delete(id):
    for topic in topics :
        if topic['id'] == id :
            topics.remove(topic)
            break
    return redirect('/')

Database - SQLite

관계형 데이터베이스 패러다임이 잘 사용된다.
DB Ranking


Database 만들기

DB는 터미널에서 제어하는 게 일반적이지만 GUI방식으로도 제어할 수 있다.
데이터베이스 (database, schema) : 표를 여러개 묶은 것
sqlitestudio 프로그램을 켜서 Add a database로 DB를 만들 수 있다.

teminal 환경에서 DB 만드는 것은 Glitch에서 진행했다.
터미널에서 '.open topics.sqlite3' 해서 topics.sqlite3 파일을 만들었고,
sqlite3을 빠져나올 때는 터미널에서 '.exit'를 하면된다.

topics.sqlite3 db파일을 사용할 때는
sqlite3 topics.sqlite3

터미널에서 이렇게 명령하면 된다.

Table 만들기

  • SQLiteStudio에서 table 만들기
    id를 primary key로 정하면 자동으로 increase 된다.

    아래와같이 id(primary key), title(not null), body를 만든다.

    DDL에서 만들어진 SQL Query문을 확인할 수 있다.

  • glitch terminal에서 table 만들기
    'sqlite3 topics.sqlite3' 명령을 넣으면 topics.sqlite3 파일이 열린다.

    '.tables'를 검색하면 topics가 나오는 걸 볼 수 있다.

SQL

SQL(Structured Query Language)
CRUD (Create Read Update Delete)

  • SQLiteStudio에서 Open SQL &editor를 클릭해서 SQL문으로 테이블에 insert한다.

관계형 데이터 베이스는 표와 같다.
SQL문을 통해 명령어로 제어할 수 있다.

2. 중요내용

GET, POST 방식을 사용해서 페이지 경로를 만들거나 데이터를 가져올 수 있었다.
GET, POST 방식에 대해서 좀 더 공부해서 Flask 웹을 만들 때 좀 더 활용할 생각이다.


3. 학습소감

단시간에 습득하기에는 학습량이 많긴 하지만
웹이 어떻게 동작하면 좋을지 먼저 구상하고, 그 흐름에 맞게 코드를 작성하면 될 것 같다.

좋은 웹페이지 즐겨찾기