2022.04.01 금
학습내용
이고잉 강사님 깃허브 주소 : https://github.com/egoingsb/daegu-ai-school-web-src
글리치 주소 : https://glitch.com/edit/#!/flask---daegu-ai-school
복습
get과 post 방식
get은 url로 정보 전달해서 보안에 취약, 길이의 한계가 있음
SQLite 이즈스함에 넣기 위해서 만든 데이터베이스??
INSERT 삽입
DELETE 삭제
SELECT 선택
ls -l 파일 목록 상세보기
import sqlite3
#파이썬에 내장되어있기 때문에 pip 할 필요 없음
conn = sqlite3.connect('db.sqlite3')
curor = conn.cursor()
curor.execute('SELECT * FROM topics')
topics = curor.fetchall()
DB를 파이썬 화 하기
from flask import Flask, request, redirect
import sqlite3
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):
contextUI = ''
if id != None:
contextUI = '<input type="submit" value="delete" class="btn btn-dark">'
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('SELECT * FROM topics')
topics = cs.fetchall()
conn.close()
liTags = ''
for topic in topics:
liTags = liTags + f'<li><a href="/read/{topic[0]}/">{topic[1]}</a></li>'
return f'''
<html>
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<style>
h1{{
border-bottom:10px solid green;
}}
h1>a{{
text-decoration:none;
}}
</style>
</head>
<body class="container">
<input type="button" value="night" onclick="
document.querySelector('body').style.backgroundColor = 'black';
document.querySelector('body').style.color = 'white';
">
<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>
</body>
</html>
'''
@app.route("/")
def index():
return template('<h2>Welcome</h2>Hello, WEB!')
@app.route("/read/<int:id>/")
def read(id):
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('SELECT * FROM topics WHERE id=?', (id,))
topic = cs.fetchone()
conn.close()
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():
title = request.form['title']
body = request.form['body']
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('INSERT INTO topics (title, body) VALUES(?,?)',(title,body))
id = cs.lastrowid
conn.commit()
conn.close()
return redirect(f'/read/{id}/')
@app.route('/delete/<int:id>/', methods=['POST'])
def delete(id):
conn = sqlite3.connect('db.sqlite3')
cs = conn.cursor()
cs.execute('DELETE FROM topics WHERE id = ?',(id,))
conn.commit()
conn.close()
return redirect('/')
# # @app.route('/update/')
# # def update():
# # return 'Update'
app.run()
결과물
데이터베이스를 조작할 땐 항상 경건한 마음으로 신중하게...
read 같은 건 서버 재부팅하면 되지만 업데이트, 삭제 같은 경우에는
돌이킬 수 없는 손실을 가져올 수도 있다고한다.
데이터베이스 비하 발언? DB 관리자들 까칠한게 대부분... ㅋㅋ
무조건 DELETE에는 WHERE가 들어간다 공식 처럼 생각하기.
어려웠던 점
글리치라는 색다른 환경이라 UI가 살짝 어색하기도 했고 파이썬 코드와 html 코드를 같이 쓰는데다가 UI가 투박해서 보기가 좀 불편했다.
학습소감
2주간의 수업 동안 웹 서비스에 대한 전체적인 틀을 살펴본 것 같다.
html, css, js 기초와 파이썬과 flask와 sqlite3까지 풀스텍 순한맛을 본 것 같다. 결과적으로 어느 것 하나 깊게 배우지는 못했지만 결과적으로는 공부의 방향성이라던지 큰 틀을 생각할 수 있는 수업이었다.
프론트엔드이던 백엔드이던 DB이던 한 분야만 깊게 공부하겠다 하더라도 이 수업은 들어봐야 할 것 같다.
Author And Source
이 문제에 관하여(2022.04.01 금), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gunho-sung/2022.04.01-금저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)