12/19 -> 플라스크 19,20,26,27
장고 -> 파이썬으로 작성된 오픈 소스 웹 프레임워크(스프링과 유사)
플라스크로 먼저 공부하고 필요하다면 장고를 공부하는게 일반적인 순서이다.
mkdir : make dir
C:>mkdir projects
배치파일 생성
path 잡힌거 확인한다 - > 고급시스템설정에서 설정
코딩은 project -> myproject에서 할 예정
가상 환경은 venvs -> myproject 에서 할 예정
flask가 자동 설치되어있다
pybo로 이름 바꿨기 때문에 cmd로 변경
http://127.0.0.1:5000 치면
set FLASK_APP=pybo
set FLASK_DEBUG=true
배치파일 수정
# main_views.py
from flask import Blueprint
bp = Blueprint('main', __name__, url_prefix='/')
@bp.route('/')
def index():
return 'Hello, 파이보!!'
@bp.route('/hello')
def hello_pybo():
return 'Hello, 하이부'
# __init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
from .views import main_views
app.register_blueprint(main_views.bp)
return app
orm, flask-migrate(테이블 생성, 컬럼 추가)설치
(myproject) C:\projects\myproject>pip install flask-migrate
myproject 밑에 config 파일 생성
(myproject) C:\projects\myproject>flask db init
from pybo import db
class Question(db.Model):
id = db.Column(db.Integer, primary_key=True) #integer와 pk이면 자동증가가 자동으로 설정된다.
subject = db.Column(db.String(200), nullable=False)
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)
class Answer(db.Model):
id = db.Column(db.Integer, primary_key=True)
question_id = db.Column(db.Integer, db.ForeignKey('question.id', ondelete='CASCADE')) #CASCADE: 연쇄작용
question = db.relationship('Question', backref=db.backref('answer_set')) # 참조를 하겠다
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)
이런 형태의 데이터베이스가 생성되었다는 것을 확인할 수 있다.
(myproject) C:\projects\myproject>flask db upgrade
(myproject) C:\projects\myproject>flask shell
q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=datetime.now())
db연동된 것 확인
수정함. 선생님께서 잘못보내주심
>>> Question.query.filter(Question.subject.like('%플라스크%')).all() []
session값 삭제
ctrl + z 누르면 종료된다.
<!--question_list.html-->
{% if question_list %}
<ul>
{% for question in question_list %}
<li><a href="/detail/{{ question.id }}">{{question.subject}}</a></li>
{% endfor%}
</ul>
{%else%}
<p>질문이 없습니다.</p>
{% endif %}
# main_views.py
from flask import Blueprint, render_template
from pybo.models import Question
bp = Blueprint('main', __name__, url_prefix='/')
@bp.route('/')
def index():
# question_list = "select * from question order by id desc" 원래는 이랬쥬
question_list = Question.query.order_by(Question.create_date.desc())
return render_template('question/question_list.html', question_list=question_list)
@bp.route('/hello')
def hello_pybo():
return 'Hello, 하이보'
# __init__.py
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
import config
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
app.config.from_object(config)
# ORM
db.init_app(app)
migrate.init_app(app, db)
from .import models
from .views import main_views
app.register_blueprint(main_views.bp)
return app
# models.py : ORM으로 테이블 선언
from pybo import db
class Question(db.Model):
id = db.Column(db.Integer, primary_key=True) #integer와 pk이면 자동증가가 자동으로 설정된다.
subject = db.Column(db.String(200), nullable=False)
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)
class Answer(db.Model):
id = db.Column(db.Integer, primary_key=True)
question_id = db.Column(db.Integer, db.ForeignKey('question.id', ondelete='CASCADE')) #CASCADE: 연쇄작용
question = db.relationship('Question', backref=db.backref('answer_set')) # 참조를 하겠다
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)