3.31 개발일지. 플라스크2, DB

김지형·2022년 3월 31일
0

ai-school

목록 보기
7/61

학습한 내용

메소드 변경

어제 학습내용에서는 create창의 입력값이 주소창에 뜨게 된다
이번에는 입력정보를 주소로 보내지 않고, 다른 방식으로 서버에 전송하도록 해보았다

  • method="POST"를 입력하면 create창에서 입력한 입력값이 주소창에 뜨지 않고, 다른 방식으로 서버에 전송된다
  • method=가 없으면 기본값으로 GET이 설정되어있다
    (GET 방식은 웹 브라우저가 고유한 웹 페이지를 식별하여 다운로드 받을때 쓰는 방식이다)

※입력값이 주소창에 뜬다는 말은, 똑같은 주소를 받은 다른 사람이 생성작업(읽기가 아닌 쓰기 작업, 글 생성, 로그인, 삭제 등등)을 할 수 있다는 얘기가 되므로, 생성작업의 경우에는 POST방식을 사용한다

  • 여기서, create_process 라우터를 설정하고, methods=['POST']를 입력해주면 (create 함수가 post방식을 허용하도록 하면),
    'GET방식은 전혀 받아들이지 않고, POST방식만 사용하겠다' 는 의미가 된다
  • 아까처럼 create 페이지 입력창에 검색어를 입력하면, 오류가 사라진다

글 생성하기

  • POST방식으로 전송된 정보를 받으려면 request를 써야한다
  • 마찬가지로 입력창에 title을 입력하면
  • 입력값이 웹 브라우저에 출력된다
  • 단, print는 디버깅 할때 사용하기 때문에 다르게 코딩을 한다
  • title을 추가했던 것 처럼 body도 추가해주고, title과 body값으로 topics의 원소를 추가해준다
  • nextId값을 새로 지정해주고, +1을 더해 다음 Id값을 준비하도록 코딩한다
    ※append: 제일 끝에 원소를 추가
    global: 함수 밖(위에서는 create_process함수 밖)에서 정의된 nextId를 함수 안에서 사용한다는 코드
  • 완성된 코드
  • 이제 create로 새 글을 생성한 후, 자동적으로 메인화면으로 이동하도록 만들어본다
  • redirect 태그를 사용한다
  • 이 때, 위 request와 마찬가지로 redirect도 파이썬에 내장되어있지 않은 코드이므로 Flask에 추가해준다
  • return 코드를 이용해 메인화면으로 돌아오도록 코딩을 한다
  • title과 body를 입력하고 create를 누르면
  • 메인화면으로 바로 이동된다

삭제

  • delete버튼을 만들어주고, 삭제할 주소로 이동하도록 코딩해주고, POST방식으로 지정해준다
    ※삭제는 읽기 기능이 아닌 쓰기(상태 변화)기능이기 때문에 GET이 아닌, form 태그를 사용한다
  • delete의 액션값을 받아줄 id를 read의 template에 설정한다
  • template를 수정했기 때문에, 가장 위에 있는 template도 같이 수정한다
  • 여기서, 이대로 실행하면 우측 화면처럼 오류가 난다
  • 홈으로 이동하면 def index():가 실행이 될텐데,
    가장 위에 있는 template는 2번째 입력값을 받도록 되어있지만,
    index의 template에는 2번째 입력값이 없기 때문에 오류가 난다
  • 그래서 입력값이 없다는 None이라는 디폴트 값을 지정해준다
  • 수정된 코드
  • 그리고 위 사진의 {id}를 받아주는 코드를 구현한다
    (delete를 누르면 /delete/1/ /delete/2/등등으로 받아주도록)

    delete버튼을 누르면
  • 이런 창이 출력된다
  • '만약에, 입력된 id와 토픽의 id와 같다면, topics에서 현재 선택된 topic과 같은 원소를remove한다'
  • remove를 처리하고 메인화면으로 되돌아오도록 return redirect를 코딩한다
  • title 1, body 1을 만들고 delete를 누르면
  • 4번 항목이 삭제된다

데이터베이스


여러가지 데이터베이스 프로그램이 있지만, 이번 시간에는 SQLite를 사용했다




경로를 지정해주고

새 데이터베이스를 작성하면

데이터베이스 파일이 생성된다


그리고 새 표(테이블)을 만들어준다

먼저 표의 이름을 지정해준다

add column을 클릭하고

1번째 컬럼으로 이름을id로 하고, 데이터 타입을 정수로 설정해준다
그리고 중복되는 id값을 추가하지 못하도록 primary로 지정해준다
또한, 데이터 타입을 정수로 설정하고 primary로 지정하면 자동적으로 숫자가 1씩 증가한다

1번째 컬럼이 정의됐다

DDl를 클릭해보면 코드형식을 볼 수 있다

2번째 컬럼 이름은 title로 하고, 데이터 타입은 텍스트로 설정한다
title 컬럼은 값이 꼭 있어야 하므로, 값을 꼭 생성하도록 하는 Not NULL를 체크한다

3번째 컬럼 이름은 body로 하고, 데이터 타입은 텍스트로 설정한다
body 컬럼은 꼭 값이 있어야 할 필요는 없으므로, 그냥 생성해준다

DDL에서 코드를 확인한다

이렇게 생성한 Structure을 실행시키려면 commit structure changes를 클릭한다

아까 확인한 DDL창이 나타나고 OK를 클릭하면

Status 창에 성공적으로 실행됐다는 메시지가 출력된다

좌측에 Tables를 열어보면 topics 테이블이 생성되어있다

Data창으로 들어가보면 표를 볼 수 있다

여기서 insert row를 클릭해 입력창을 활성화하고

값을 입력하고, commit 버튼을 누르면 행이 추가된다

Open SQL &editor를 클릭하면, 커맨드로 행을 추가할 수 있다

코드를 입력하고 실행버튼을 누르면 Status창에 결과가 출력된다

그리고 topics테이블로 들어가보면, 결과를 확인할 수 있다

터미널 창에서 커맨드로 작업하기

똑같은 작업을 Glitch의 터미널 창에서 할 수 있다

Glitch에서 터미널 창 활성화

sqlite3를 입력해서 sqlite3를 실행해준다

topics라는 데이터베이스를 만들어준다

그리고 .exit로 나간 다음, ls로 파일 목록을 출력하고, topics.sqlite3 데이터베이스가 생성됨을 확인한다

topics.sqlite3 데이터베이스를 열어본다

topics 테이블을 만들고, id, title, body 칼럼을 생성해준다

그리고 테이블이 잘 만들어졌는지 확인해준다

topics.sqlite3 파일 안에 방금 생성한 표가 들어가있는 상태이다

ls -al를 입력하면 더욱 상세하게 확인할 수 있다

어려운 내용

데이터베이스 강의를 들을때 프로그램과, 터미널 창 양 쪽을 동시로 진행하고, 강의 속도도 조금 빨라서 실습을 끝까지 따라가지 못했다

해결방법

강의가 끝나고, 녹화본을 보면서 다시 천천히 실습해보면서 정리하였다

학습소감

이번 강의까지 해서 Flask의 읽기, 생성, 삭제와 데이터베이스까지 배웠다
html에서는 태그 암기나 코드 오타때문에 애를 먹었지, 코드에 대한 이해도의 어려움은 많지 않았지만,
Flask에서는 어떤 코드가 어떤 원리로 실행되고, 무엇이 원인이 되어 오류가 생기고, 어디에 어떤 코드를 사용해야할지
등등 본질적인 내용에 대한 어려움이 많았다
하지만, 배운 내용도 많기 때문에, 잘 활용하면 많은 기능들을 구현해낼 수 있는 훌륭한 도구가 될 것이라는 생각도 들기에, 복습을 할 필요성을 다시 한번 느낀다

profile
안녕하세요!

0개의 댓글