TIL 2022-12-19 플라스크

JYR00·2022년 12월 20일
0

TIL

목록 보기
48/60

12/19 -> 플라스크 19,20,26,27

장고 -> 파이썬으로 작성된 오픈 소스 웹 프레임워크(스프링과 유사)

플라스크로 먼저 공부하고 필요하다면 장고를 공부하는게 일반적인 순서이다.

플라스크 설치

  • Python 설치 전 버전확인
  • 설치시 python-V 확인



mkdir : make dir

  • .. : 상위로 이동
  • cmd에서 C:>cd venvs 생성
  • 가상환경만들기
    -



    가상환경 생성되었음
    activate 치면 가상환경 진입성공
    벗어나기 위해서는 deactivate -> (myproject) C:\venvs\myproject\Scripts>deactivate
  • 플라스크 설치
    (myproject) C:\venvs\myproject\Scripts>pip install flask
  • 업그레이드
    (myproject) C:\venvs\myproject\Scripts>python -m pip install --upgrade pip



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

# 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

# __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





다운로드 장소

https://sqlitebrowser.org/dl/



4. 플라스크 orm라이브러리 설치

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

<!--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

# 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

# __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

# 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)



















0개의 댓글