개발일지 7일차 | 파이썬기초- 데이터베이스 Python 연동

1. 학습한 내용

주석 ctrl+/ (주석 유무 설정 가능)
flask
pip install flask flask설치-flask라는 라이브러리 사용 가능

from flask import Flask, request, redirect

app = Flask(__name__) 내장변수
데이터의 기본적인 형태
topics = [
	{"id":1, "title":"html", "body":"html is ...."},
  	{"id":2, "title":"css", "body":"css is ...."},
  	{"id":3, "title":"js", "body":"js is ...."}
    
def template(content, id=None):
  liTags = ''
  for topic in topics:
    liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
  return f'''
  <html>
    <body>
      <h1><a href="/">WEB</a></h1>
      <ol>
        {liTags}
      </ol>
      {content}
      <ul>
        <li><a href="/create/">create</a></li>
        <li>
          <form action="/delete/{id}/" method="POST">
            <input type="submit" value="delete">
          </form>
        </li>
      </ul>
    </body>
  </html>
  '''
사용자가 최상위route페이지로 접근 했을 때
read(id)페이지로 접근 했을 때
create(생성)페이지로 접근 했을 때
update페이지로 접근 했을 때
누가 그 응답을 처리할 것인가? -> route, router

@app.route("/")
def index():
  return template('<h2>Welcome</h2>Hello, WEB!') 응답을 return값으로 받고 있음
  (flask의 약속, frame work)

@app.route("/read/<int:id>/")
def read(id):
  title = ''
  body = ''  
  for topic in topics :
    if topic['id'] == id:
      title = topic['title']
      body = topic['body']
      break; 더이상 반복문이 실행되서 컴퓨터 파워를 낭비하지 않게.
  return template(f'<h2>{title}</h2>{body}', id)

@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>
  ''' 폼태그가 가르키는 액션으로 전송 한페이지 안에는 여러 input control이 존재 할 수 있는데 그것들을 누구한테 보낼 것인가를 그룹핑하고 지정하는 것이 폼태그
  return template(content)
브라우저 입장에서 어떤 정보를 가져오는 것은 읽기get
어떤 정보를 추가하거나 로그인하거나 등등은 쓰는것 get사용X post
파이썬 자체는 return이 없어도 괜찮으나 flask는 존재해야 함

@app.route('/create_process/', methods=['POST']) get은 거부하고 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}/') nextId를 1증가하기 전에 값으로 가야함
redirect를 쓰면 이곳으로 가라고 명령하는 것

@app.route('/delete/<int:id>/', methods=['POST'])
def delete(id):
  for topic in topics:
    if topic['id'] == id:
      topics.remove(topic)
      break;
  return redirect('/') 삭제를 하면 삭제한 것을 알 수 없기 때문에 홈으로 가게 만들어야 함
 
# @app.route('/update/')
# def update():
#   return 'Update'

app.run() 앱을 실행시킴

http hypertext transfer protocol 통신규칙
이 통신규칙이 실어나르는 것이 html, css, js etc.

database

SQLite

관계형 데이터베이스
설치
다운로드
실행

표 table

표가 많아지면 서로 연관된 표를 그룹핑해서 정리 -> 데이터베이스database, shema = excel file

데이터 베이스 제작시,

topics.sqlite3

식별자는 중복되면 안된다.
primery를 체크하면 컬럼은 고유한 식별자가 되며 integer를 사용하면 숫자가 1씩증가하는 고유칼럼이 된다.
DDP Data Definition Language
title은 반드시 규제가 되어야 하므로 not null 선택

시스템의 문법(함수)은 대문자로 표기
사용자의 문자는 소문자로 표기

2. 어려웠던 점

어제의 수업을 완전히 이해하지 않은 상황에서 flask를 복습부터 추가적인 학습으로 이어져서 조금 힘겨웠다.
이게 무엇을 의미하는지도 어떻게 구성되는지도 어렴풋이아는 시점에서 심화적으로 알아가는 것이기에 실습은 포기하고 그저 강의를 수강했다.

3. 해결방법

수업을 종료한 후 올라온 오늘 수업 내용을 다시금 보면서 오늘 수업을 복기했다.
복습의 좋은점은 나의 시간에 맞춰 할 수 있다는 점이고 이런 장점을 백번 이용해 충분한 시간을 갖고 실습과 복습을 진행했다.

4. 학습소감

점점 할 수 있는 것이 늘어간다는 느낌을 받는다.
그렇지만 아직 수업단계는 초등학생정도의 느낌이다. 기본부터 이렇게 힘들다면 나중에는 어떻게 해야할지 조금 막막해진다.

좋은 웹페이지 즐겨찾기