Flask에서 가능한 가장 빠른 노트 앱 구축(Shopyo 사용)

20472 단어 shopyoflask
Shopyo은 Flask를 정말 빠르게 시작할 수 있는 프레임워크입니다. 기본적으로 시작할 수 있는 여러 라이브러리가 포함되어 있습니다. 이 자습서에서는 시작할 수 있는 간단한 앱을 빌드합니다. FlaskCon 2021 [ site , codebase ]에 사용했습니다. 이 튜토의 앱을 사용할 수 있습니다here.

첫 번째 단계



첫 번째 단계는 라이브러리를 설치하는 것입니다.

python3.9 -m venv venv # create virtual env
. venv/bin/activate # activate (linux version)
pip install shopyo==4.4.3


그런 다음 폴더를 만듭니다.

mkdir note_app


우리는 폴더에 들어갑니다

cd note_app


그런 다음 새로운 Shopyo 프로젝트를 만듭니다.

shopyo new


출력은 다음과 같습니다.

creating project note_app...
#######################
[x] Project note_app created successfully!


트리 조회는

├── docs
│   ├── conf.py
│   ├── docs.rst
│   ├── index.rst
│   ├── Makefile
│   └── _static
│       └── custom.css
├── MANIFEST.in
├── note_app
├── pytest.ini
├── README.md
├── requirements.txt
├── setup.py
└── tox.ini


지금은 앱 패키징에 관심이 없으므로 내부 note_app/폴더로 전환할 수 있습니다.

cd note_app


내부 note_app 폴더의 구조는 다음과 같습니다.

├── note_app
│   ├── app.py
│   ├── app.txt
│   ├── autoapp.py
│   ├── CHANGELOG.md
│   ├── cli.py
│   ├── config_demo.json
│   ├── config.py
│   ├── conftest.py
│   ├── __init__.py
│   ├── init.py
│   ├── manage.py
│   ├── modules
│   ├── shopyo_admin.py
│   ├── static
│   ├── tests
│   │   ├── conftest.py
│   │   └── test_configs.py
│   └── wsgi.py


모듈 생성



메모 앱을 만들 수 있습니다.

shopyo startapp notes

modules/ 아래에 새 폴더가 생성됩니다. modules/note_app/의 내용은 다음과 같습니다.

modules/notes/
├── forms.py
├── global.py
├── info.json
├── models.py
├── static
├── templates
│   └── notes
│       ├── blocks
│       │   └── sidebar.html
│       └── dashboard.html
├── tests
│   ├── test_notes_functional.py
│   └── test_notes_models.py
└── view.py


기본적으로 생성되는 파일입니다.

첫 번째 보기 작성


info.json 파일에는 url 네임스페이스(module_name) 및 url 접두사를 포함하여 모듈에 대한 몇 가지 기본 사항이 나열되어 있습니다.

{
    "author": {
        "mail": "",
        "name": "",
        "website": ""
    },
    "display_string": "Notes",
    "fa-icon": "fa fa-store",
    "module_name": "notes",
    "type": "show",
    "url_prefix": "/notes"
}

url_prefix"/"로 바꾸자

{
    ...,
    "url_prefix": "/"
}


우리의 view.py는 기본적으로 생성되는 다음과 같습니다.

from shopyo.api.module import ModuleHelp

mhelp = ModuleHelp(__file__, __name__)
globals()[mhelp.blueprint_str] = mhelp.blueprint
module_blueprint = globals()[mhelp.blueprint_str]


@module_blueprint.route("/")
def index():
    return mhelp.info['display_string']


반환 문자열을 String from notes app로 변경해 보겠습니다.

@module_blueprint.route("/")
def index():
    return "String from notes app"


앱 실행



Runshopyo rundebug을 실행하여 디버그 모드에서 앱을 실행합니다.

"http://127.0.0.1:5000/ "로 이동하면 "노트 앱의 문자열"이 반환되어야 합니다.

실행 명령here에 대해 자세히 알아볼 수 있습니다.

모델 생성



노트에는 제목과 내용이 있습니다. modules/notes/models.py에 다음과 같이 작성합니다.

from init import db
from shopyo.api.models import PkModel



class Note(PkModel): 

    __tablename__ = 'notes'

    title = db.Column(db.String(80), nullable=False)
    content = db.Text()

init 가져오기는 init.py 파일에서 가져옵니다.PkModel는 기본 키가 db.Modelid와 동일합니다.

그런 다음 앱을 초기화합니다. 후드 아래에서 Flask-Migrate를 사용합니다. 더 많은 초기화 옵션을 볼 수 있습니다here.

$ shopyo initialise
initializing...
Cleaning...
#######################
Auto importing models...
#######################

Creating db...
#######################

Migrating db...
#######################

Upgrading db...
#######################

Collecting static...
#######################

Uploading initial data to db...
#######################

All Done!


이것은 Shopyo가 기본 sqlalchemy 연결 문자열로 shopyo.db를 추가할 때 작동했습니다.

Flask 관리자 구성



이제 빠른 CRUD 보기를 갖도록 flask-admin을 구성하겠습니다. 다행스럽게도 Shopyo에는 이미 몇 가지 기본 사항이 있습니다.

먼저 Flask 로그인 인증을 제거하도록 수정shopyo_admin.py
from flask import redirect
from flask import request
from flask import url_for
from flask_admin import AdminIndexView
from flask_admin import expose
from flask_admin.contrib import sqla as flask_admin_sqla
from flask_login import current_user


class DefaultModelView(flask_admin_sqla.ModelView):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    # def is_accessible(self):
    #     return current_user.is_authenticated and current_user.is_admin

    # def inaccessible_callback(self, name, **kwargs):
    #     # redirect to login page if user doesn't have access
    #     return redirect(url_for("auth.login", next=request.url))


class MyAdminIndexView(AdminIndexView):
    # def is_accessible(self):
    #     return current_user.is_authenticated and current_user.is_admin

    # def inaccessible_callback(self, name, **kwargs):
    #     # redirect to login page if user doesn't have access
    #     return redirect(url_for("auth.login", next=request.url))

    @expose("/")
    def index(self):
        # if not current_user.is_authenticated and current_user.is_admin:
        #     return redirect(url_for("auth.login"))
        return super().index()
# 
    @expose("/dashboard")
    def indexs(self):
        # if not current_user.is_authenticated and current_user.is_admin:
        #     return redirect(url_for("auth.login"))
        return super().index()


그런 다음 app.py에서 Flask-Login을 주석 처리하여 로드하지 마십시오.

def load_extensions(app):
    ...
    # login_manager.init_app(app)


그런 다음 app.py에서 Note 모델을 가져옵니다.

from modules.notes.models import Note

setup_flask_admin 함수를 다음과 같이 수정합니다.

def setup_flask_admin(app):
    admin = Admin(
        app,
        name="My App",
        template_mode="bootstrap4",
        index_view=MyAdminIndexView(),
    )
    admin.add_view(ModelView(Note, db.session))


이제 /admin로 이동하면



노트를 클릭하면 노트 모델을 편집할 수 있습니다. 몇 가지 모델을 추가해 봅시다!



템플릿 표시



남은 것은 메인 페이지에 메모를 표시하는 것입니다.
modules/notes/templates/notes에서 내용이 있는 index.html이라는 파일을 만듭니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
</head>
<body>
    {% for note in notes %}
        {{note.title}}<br>
        {{note.content}}<hr>
    {% endfor %}
</body>
</html>


view.py를 다음과 같이 수정합니다.

from shopyo.api.module import ModuleHelp
from flask import render_template

from .models import Note 


mhelp = ModuleHelp(__file__, __name__)
globals()[mhelp.blueprint_str] = mhelp.blueprint
module_blueprint = globals()[mhelp.blueprint_str]


@module_blueprint.route("/")
def index():
    notes = Note.query.all()
    return render_template('notes/index.html', notes=notes)


그 결과:



Shopyo는 다음과 같은 유틸리티도 제공합니다.

from shopyo.api.templates import yo_render

...
@module_blueprint.route("/")
def index():
    notes = Note.query.all()
    context = {
        'notes': notes
    }
    return yo_render('notes/index.html', context)


데모 앱 사용해 보기



데모 앱을 사용해보고 싶다면 그냥 실행하세요(플라스크 로그인 수정 사항에 다시 댓글을 달아주세요).

mkdir project
cd project
shopyo new -m # -m adds default modules
cd project
shopyo initialise
shopyo rundebug


그러면 인증된 Flask 관리자가 어떻게 생겼는지 확인할 수 있습니다.

이 게시물을 즐기시기 바랍니다!

이 튜토의 앱을 사용할 수 있습니다here.

좋은 웹페이지 즐겨찾기