2022.4.1 개발일지 python

정성우·2022년 4월 1일
0

1.학습한 내용

from flask import Flask, request, redirect
import sqlite3
#sqlite3를 통해 database에 접근해 여러 동작을 실행 

app=Flask(__name__)

def template(content,id=None):
  contextUI=''
  if id !=None:
    contextUI='<input type="submit" value="delete" class="btn btn-dark">'
#contextUI에 빈값을 넣어주고 입력받은 id값이 None이 아닐경우에만 위의 input을 실행  
  data=sqlite3.connect('db.sqlite3')
  cs=data.cursor()
  cs.execute('SELECT*FROM topics')
  topics=cs.fetchall()
  data.close()
#data에 db.sqlite3를연결
#cs는 데이터에 접근할수있게해주는 커서
#execute ()안의 명령문 실행
# db.sqlite3안의 topics 전부를 'topics'에 저장
#data연결 종료
  liTags = ''
  for topic in topics:
    liTags = liTags + f'<li><a href="/read/{topic[0]}/">{topic[1]}</a></li>'
#topic[0]=id topic[1]=title topic[2]=body
  return f'''
  <html>
    <head>
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> 
      <style>
        h1{{
          border-bottom: red solid 10px;
        }}
      </style>
      <script>
        function changebackground(){{
        document.querySelector('body').style.backgroundColor="black";
        }}
      </script>
    </head>
    <body class="container">
      <h1><a href="/">WEB</a></h1>
      <ol>
        {liTags}
      </ol>
      {content}
      <form action="/delete/{id}/" method="POST">
        <div class="btn-group" role="group" aria-label="Basic example">  
          <a href="/create/" class="btn btn-dark">create</a>
          {contextUI}
        </div>
      </form>
      <input type="button" value="background" onclick="changebackground()">
    </body>
  </html>
  '''
#위에 contextUI에 id가 None이면 빈값이므로 아무것도 실행되지않고
#id가 None이 아니면 submit 버튼이 생기고 form에 의해 눌렀을시 action이 실행됨
#create와 delete를 묶어서 bootstrap기능으로 꾸밈
      
# 누르면 changebackground()를 실행하는 버튼 추가 
 
@app.route("/")
def index():
  return template('<h2>Welcome</h2>Hello, WEB!')

@app.route("/read/<int:id>/")
def read(id):
  data=sqlite3.connect('db.sqlite3')
  cs=data.cursor()
  cs.execute("SELECT*FROM topics WHERE id=?",(id,))
  topic=cs.fetchone()
  data.close()
# topics에서 id가 입력받은 id와 같은 데이터를 추출해 topic에 저장
  title = topic[1]
  body = topic[2]
  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>
  '''
  return template(content)

@app.route('/create_process/',methods=['POST'])
def create_process():
  data=sqlite3.connect('db.sqlite3')
  cur=data.cursor()
  title=request.form['title']
  body=request.form['body']
  cur.execute('INSERT INTO topics (title,body) VALUES(?,?)',(title,body))
  id=cur.lastrowid
  data.commit()
  data.close()
  return redirect(f'/read/{id}/')
#request받은 title과 body를 title과 body에 저장
#topics에 title과 body 추가
#데이터 수정후 lastrowid를 id에 저장
#데이터 수정 종료 /read/id/로 redirect

@app.route("/delete/<int:id>/",methods=['POST'])
def delete(id):
  data=sqlite3.connect('db.sqlite3')
  cur=data.cursor()
  cur.execute('DELETE FROM topics WHERE id=?',(id,))
  data.commit()
  data.close()
  return redirect('/')
# topics의 id와 입력받은 id와 같은 topics 데이터를 삭제

app.run()

실행결과
첫화면
create
delete
background

학습한 내용 중 어려웠던 점 또는 해결못한 것들
delete버튼을 눌렀을때 한번더 확인하는 팝업창이 있으면 좋겠다.

해결방법 작성
tkinter.messagebox.askyesno(title,body)
import 해오는것부터 오류가난다 뭐가문제일까

학습 소감
예외처리를 통해서 read를 했을때만 delete 버튼이 생성되게하는걸 배웠다. 재미있었음

0개의 댓글

관련 채용 정보