Python Flask簡易チュートリアル
17779 ワード
1. Why Flask? 公式文書詳細、学習コストが低く、プロジェクトの他のメンバーが迅速に開発に投入するのに有利である フレームワークは軽く、拡張性が高く、使いやすい拡張(extension) がたくさんあります.このフレームワークは、 を積極的に維持および開発している.
2.紹介するFlaskの拡張 flask blueprintは、ルーティング を登録、管理するために使用される. flask_restfulは、REST APIs の構築をサポートするために使用される flask_migrateデータベースバージョンの移行を管理するための flask_sqlalchemy ormは、データベース・オブジェクトをマッピングするためのデータ操作方法 を提供する.
3.プロジェクト構造
パス
機能
user/
リソースまたはモジュール、ここではユーザーモジュール
migrations
データベース移行ファイル
user/views.py
資源に対する要求を処理する(例えばGET,POST)
user/helpers.py
モジュールに関連する補助関数
Flask appの初期化
blueprint.py
ルート
bootstrap.py
appの起動
models.py
データベースエンティティのオブジェクト
4.キーコード
Flask appの初期化
ルーティング登録
2種類のパッケージを使用 flask blueprintの一般的なルーティングであり、1つの関数はapi要求 に対応する. flask_restful単位はリソースであり、GET、POSTなどのhttpメソッド をサポートする.
以上の2つのルーティングをappに登録します
マッピングされたデータベースのオブジェクトを定義し、オブジェクトによってデータを操作します.
flask_の使用migrate管理データの移行
プロジェクトの実行
Githubプロジェクトアドレス
2.紹介するFlaskの拡張
3.プロジェクト構造
- project
- user
- helpers.py
- views.py
- migrations
- __init__.py
- blueprint.py
- bootstrap.py
- models.py
パス
機能
user/
リソースまたはモジュール、ここではユーザーモジュール
migrations
データベース移行ファイル
user/views.py
資源に対する要求を処理する(例えばGET,POST)
user/helpers.py
モジュールに関連する補助関数
__init__.py
Flask appの初期化
blueprint.py
ルート
bootstrap.py
appの起動
models.py
データベースエンティティのオブジェクト
4.キーコード
Flask appの初期化
# __init__.py
from flask import Flask
app = Flask(__name__)
ルーティング登録
2種類のパッケージを使用
# user/views.py
@blueprint.route('/password', methods=['PUT'])
def update_password():
form = request.get_json(True, True)
user_id = auth_helper()
new_pass = form.get("password")
if not new_pass:
return jsonify(error=" "), 400
new_pass = encrypt_helper(new_pass)
User.patch(user_id=user_id, password=new_pass)
cookie = request.cookies
session_id = cookie.get('fat-wallet')
session.pop(session_id)
return jsonify(data="ok"), 200
# user/views.py
class UserResource(Resource):
def get(self):
student_id = request.args.get("student_id")
username = request.args.get("username")
offset = request.args.get("offset")
limit = request.args.get("limit")
users = User.get(student_id=student_id, username=username, offset=offset, limit=limit)
result = [{"user_id": user.id, "student_id": user.student_id,
"username": user.username, "major": user.major,
"email": user.email, "phone": user.phone,
"avatar": user.avatar.decode() if user.avatar else None} for user in users]
return dict(data=result, count=len(result)), 200
以上の2つのルーティングをappに登録します
# blueprint.py
from backend.user.views import blueprint as user_blueprint
from backend.user.views import UserResource
def setup(app):
api = Api(app)
app.register_blueprint(user_blueprint, url_prefix='/users')
api.add_resource(UserResource, '/users/')
マッピングされたデータベースのオブジェクトを定義し、オブジェクトによってデータを操作します.
# models.py
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:admin@mysql/money'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class MyMixin(object):
__table_args__ = {
'mysql_engine': 'InnoDB',
'mysql_charset': 'utf8mb4',
}
class User(db.Model, MyMixin):
__tablename__ = 'users'
id = db.Column(BIGINT(unsigned=True), primary_key=True)
student_id = db.Column(db.String(10), unique=True)
username = db.Column(db.String(20), unique=True, nullable=False)
password = db.Column(db.String(40), nullable=False)
major = db.Column(db.String(20))
email = db.Column(db.String(30), unique=True)
phone = db.Column(db.String(20), unique=True)
avatar = db.Column(db.LargeBinary(2**21 - 1)) # 2M
# model
user = User(username=username, password=pass_md5, email=email)
db.session.add(user)
db.session.commit()
flask_の使用migrate管理データの移行
flask db init # ( migrations )
flask db migrate -m "msg" # model ,
flask db upgrade id # , id , head,
flask db history #
プロジェクトの実行
# debug mode
flask run --host=0.0.0.0
Githubプロジェクトアドレス