フラスコ最速のノートアプリをビルドします


Shopyo フレームワークは、フラスコを本当に速く始められることです.デフォルトで始まるライブラリがいくつかあります.このチュートリアルでは、簡単なアプリを始めるために構築されます.私たちはFlaskcon 2021にそれを使用しましたsite , codebase ]. このtutoのアプリが利用可能です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
我々は今の我々のアプリを包装することに興味がないので、我々は内側のNoteCloudアプリ/フォルダに切り替えることができます
cd 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
これらはデフォルトで作成されたファイルです.

最初のビューを書く


The info.json ファイルは、URLの名前空間(モジュール名)とURL接頭辞を含むモジュールに関するいくつかの基本を示します
{
    "author": {
        "mail": "",
        "name": "",
        "website": ""
    },
    "display_string": "Notes",
    "fa-icon": "fa fa-store",
    "module_name": "notes",
    "type": "show",
    "url_prefix": "/notes"
}
変えましょうurl_prefix to "/"
{
    ...,
    "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"

アプリの実行


ランshopyo 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()
The init インポートはinit.py ファイル.
The PkModeldb.Model デフォルトでid 主キーとして
その後、我々はアプリを初期化します.それはフードの下に移行フラスコを使用しています.より多くの初期化オプションを表示できますhere
$ shopyo initialise
initializing...
Cleaning...
#######################
Auto importing models...
#######################

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

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

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

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

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

All Done!
これは、Shopyo追加shopyo.db 基本的なSQLAlchemy接続文字列として.

フラスコ管理者の設定


今すぐFlask管理者は、迅速なビューを持つように設定しましょう.幸いなことに、Shopyoはすでにいくつかの基礎が進行中です.
まず、変更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()
次に、アプリで.Pyは、それをコメントアウトしてフラスコのログインをロードしないでください.
def load_extensions(app):
    ...
    # login_manager.init_app(app)
app.py ノートモデル
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>
ビューを変更します.py to
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もいくつかのutilsを提供します
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
その後、どのようにオーサドフラスコ管理者のように見えることができます.
このポストをお楽しみください!
このtutoのアプリが利用可能ですhere