03.31 파이썬4(flask의 request,redirect), 데이터베이스

배운것

방식

GET (대문자로 할것) : 요청을 '전송'할때 요청내용을 'url'에 담는다.
웹브라우저입장에서볼떄 편하며, 어떤 정보를 가져올때 쓰는 방법,
고유한 웹페이지를 식별해서 가져올때, 다운받을때 사용= 뒤에 숫자만 바뀌는것 
읽기만 가능
POST              :  ''                      'body'에 담는다
브라우저에서 사이트에 정보를 추가, 수정,삭제,로그인 등 쓰는 작업할때 씀 
url에 title,body가 없음,url이 아닌 제 3자로 표현된다(payload)

기본적으로 flask에서 GET을 내장, 하지만 POST는 없음= 해당 함수에 라우팅작업 필요

@app.route('/create_process/', method['POST'])   (리스트형으로 표현)
def create_process():
	return 'Sucess!'

method에 둘다 포함할 수도 있음! 하지만 ['POST'] 하면 GET방식을 거부할수있음

request 요청문

from flask import request

Flask처럼 import 뒤에 입력해준다.


> from flask import Flask
from flask import request
와
from flask import Flask, request는 동일한 의미
nextId = 4 (함수밖에서 선언된 변수)

@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)
  
@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} # 함수안에서 읽을순 있다.
  topics.append(newTopic)
  nextId = nextId + 1 
  return redirect(f'/read/{nextId-1}/')

flask에서 제공하는 request는 form 태그에 포함된 정보에 접근

틀: POST 방식으로 넘어온 정보들을 request.form[내용]을 사용해서 입력값 받기
1.입력값은 create_process() 함수를 통해 만들어짐
2.하지만 nextId라는 변수는 함수밖에서 선언됨,접근은 O 변경은x = global로서 지정해준다.
3.topics는 왜 global이 필요없을까? = topics를 바꾼것이 아니라 이미 존재하는 topics를 끼워 넣기때문. 만약 topics = newTopic은 안된다.
append,delete 할뿐이라면 상관없다.
4.예를들어 4라는 페이지명이 생겼다. 근데 그전페이지로 연결해주기 위해
redirect가 필요하고 4-1인 3으로의 페이지로 연결해줌

이 과정까지 하면
from flask import request, redirect 이런식으로 바꿔줘야함

create 버튼->create_process 진행->만들어진 /read/nextId+1/을 다시 매개변수로 해서 redirect->/read/nextID+1-1/로 찾아가게됨

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('/')

/delete/id번호/ 를 호출하면 삭제하게 해줌

SQLite https://www.sqlitestudio.pl/

관계형 데이터베이스는 표다
sql 문을 통해서 데이터베이스를 제어할 수 있다.
Glitch의 터미널에
sqlite3 / 입장
.open topics.sqlite3 /데이터베이스 파일 만들기
.exit /나가기

sqlite3 topics.sqlite3 /sqlite studio로 만든 파일을 실행

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

변수는 소문자로, 틀?은 대문자로 하는것이 가독성이 좋음
CREATE는 TABLE을 생성
INSERT명령어는 데이터를 추가 할 수 있음

INSERT INTO topics VALUES ('title':'SQL', 'body':'SQL is ')

라이브러리
프레임워크 함수는 내가만드는데 호출을 플라스크가 하는것,완제폼에 부품만 바꿔끼우는것

느낀점

어제 내용을 이해했다고 생각했는데, 연계로 하는 내용인데 집중이 잘안되서 이해가 계속 부족한 느낌이다. 좀 더 시간을 투자해야겠다.

좋은 웹페이지 즐겨찾기