Flask 간단한 CRUD 작업
32785 단어 Flask 프레임
Flask 개발은 업계 권위의 프로젝트 파일 구조가 없지만 주류의 방법이 있다.인터넷상의 문장과 코드를 참고하여 나는 다음과 같은 구조를 채택하려고 한다
project-folder/
app /
templates /
프로비저닝
먼저 구성부터 시작하겠습니다. 주로 Flask CRUD의 요소를 설명하기 위한 것이기 때문에 구성은 SECRET케이 다 아꼈어.Windows 환경 변수에서 데이터 연결에 대한 URI를 가져옵니다.
# configs.py
import os
SQLALCHEMY_DATABASE_URI = os.getenv('DB_URI')
SQLALCHEMY_TRACK_MODIFICATIONS = False
데이터베이스 CRUD 작업
Flask-SQLAlchemy를 사용하여 데이터베이스의 CRUD 작업을 수행합니다.먼저
app/models.py
에서 Model의 구조를 정의하고 데이터 테이블과 필드에 매핑합니다.# models.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Notes(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
body = db.Column(db.Text)
def __repr__(self):
return 'Note body: {}'.format(self.body)
그런 다음
app/controllers.py
파일에서 데이터베이스에 대한 CRUD 작업을 정의하는 다섯 가지 방법이 있습니다.# controllers.py
from app.models import db, Notes
from sqlalchemy import desc
class NotesDao():
def create_note(self, note_body):
new_note = Notes(body=note_body)
db.session.add(new_note)
db.session.commit()
return new_note
def update_note(self, note):
modified_note = Notes.query.get(note.id)
db.session.commit()
return modified_note
def delete_note(self, note):
note_to_delete = Notes.query.get(note.id)
db.session.delete(note_to_delete )
db.session.commit()
return True
def list_all(self):
return Notes.query.order_by(desc(Notes.id)).all()
def get_note(self, id):
return Notes.query.get(id)
뷰 함수 정의
app/views.py
파일에서 청사진(blueprint)과 보기 함수를 정의합니다
from flask import request, render_template, Blueprint, flash, redirect, url_for
from app.controllers import NotesDao
from app.forms import *
#
notesbp = Blueprint('notesbp', __name__, template_folder='templates')
@notesbp.route('/')
def index():
noteservice = NotesDao()
# return book list to front end
notes = noteservice.list_all()
return render_template('index.html', notes=notes)
@notesbp.route('/new', methods=['GET', 'POST'])
def new_note():
form = NewNoteForm()
if request.method == 'POST':
body = request.form['body']
noteservice = NotesDao()
noteservice.create_note(body)
return redirect(url_for('notesbp.index'))
return render_template('new_note.html', form=form)
@notesbp.route('/edit/' , methods=['GET', 'POST'])
def edit_note(note_id):
form = EditNoteForm()
note = NotesDao().get_note(note_id)
if request.method == 'POST':
body = request.form['body']
note.body = body
NotesDao().update_note(note)
return redirect(url_for('notesbp.index'))
form.body.data = note.body
return render_template('edit_note.html', form=form)
@notesbp.route('/delete/' , methods=['GET'])
def delete_note(note_id):
notesdao = NotesDao()
note = notesdao.get_note(note_id)
notesdao.delete_note(note)
return redirect(url_for('notesbp.index'))
설명: 블루프린트는 Flask 코드를 모듈화한 도구로 본 예에서는 현재 모듈을
notesbp
라고 명명하고, 보기 함수는 블루프린트 맵 루트를 이용하고, url_for()
함수는 블루프린트를 이용하여 보기 함수를 찾는다.HTML 파일
보기 함수에 연결된 html 파일을templates 폴더에 넣습니다.
index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask basic CRUDtitle>
<link rel="stylesheet" type="text/css" href="../static/styles.css">
head>
<body>
<a href="{{ url_for('notesbp.new_note') }}">New notea>
<h4> {{ notes|length }} Notes: h4>
<table>
<tr>
<th>IDth>
<th>Bodyth>
<th>Actionth>
tr>
{% for note in notes %}
<tr>
<td> {{note.id}} td>
<td> {{note.body}} td>
<td>
<a href="{{ url_for('notesbp.edit_note', note_id=note.id) }}">Edita>
<a href="{{ url_for('notesbp.delete_note', note_id=note.id) }}">Deletea>
td>
tr>
{% endfor %}
table>
body>
html>
edit_note.html 및 newnote.html 내용 동일
<html lang="en">
<head>
<meta charset="UTF-8">
<title>New notetitle>
head>
<body>
<h2>New noteh2>
<form method="POST">
{{ form.body(rows='10',cols='100') }}<br/>
{{ form.submit }}
form>
body>
html>
html 파일의 작성을 간소화하기 위해 flask-wtf 폼을 사용했고 폼의 코드는
app/forms.py
파일에 놓여 있습니다.from wtforms import Form, TextAreaField, SubmitField
class NewNoteForm(Form):
body = TextAreaField('body')
submit = SubmitField('Save')
class EditNoteForm(Form):
body = TextAreaField('body')
submit = SubmitField('Update')
공장 함수로 app 만들기
코드는
app/__init__.py
파일에 배치됩니다.from flask import Flask
import configs
from app.models import db
from app.views import notesbp
def create_app():
app = Flask(__name__)
#
app.config.from_object(configs)
# db
db.app = app
db.init_app(app)
#
app.register_blueprint(notesbp)
return app
데이터베이스 테이블 생성
SQL 명령문
create database xxx charset utf8;
으로 데이터베이스를 만든 다음 실행db_scripts.py
코드로 테이블을 만듭니다.from app.models import db
from app import create_app
app = create_app()
db.app = app
db.init_app(app)
if __name__ == '__main__':
db.drop_all()
db.create_all()
print ('Done')
시작 파일
백엔드 프로그램은
server.py
를 통해 시작되며 코드는 다음과 같습니다.from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
본문 소스 코드:https://github.com/stonewm/python-practice-projects/tree/master/Flask/Notebook-v1.0
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Flask 간단한 CRUD 작업간단한 CRUD 조작은 기본적으로 특정한 개발 구조와 플랫폼의 특징을 볼 수 있다.Flask는 마이크로 프레임워크로서 소형 응용 프로그램을 개발할 때 매우 적합하다.본고는 간단한 Notebook 응용을 개발하여 Fl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.