Login、Admin、MongoDBを備えたPythonFlaskアプリケーションのボイラープレートテンプレート。 Flaskから始めますか?
これはあなたが使用できる定型文です フラスコ-mongoengine 、 フラスコ-WTF その他。 これにより、Flaskアプリが起動して実行されます。
関連コース: Python Flask:Flaskを使用してWebアプリを作成する
フラスコ
ディレクトリ構造
フラスコはマイクロフレームワークであるため、多くのことを決定できます。 Flaskコードの構造は、個人ビュー(または会社ビュー)です。
私がお勧めするディレクトリ構造は次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
├── README.md ├── application │ ├── __init__.py │ ├── controllers │ │ └── __init__.py │ ├── forms │ │ └── __init__.py │ ├── models │ │ └── __init__.py │ ├── services │ │ └── __init__.py │ ├── static │ │ └── __init__.py │ ├── templates │ │ └── __init__.py │ └── utils │ └── __init__.py ├── config │ ├── __init__.py │ ├── default.py │ ├── development.py │ ├── development_sample.py │ ├── production.py │ ├── production_sample.py │ └── testing.py ├── deploy │ ├── flask_env.sh │ ├── gunicorn.conf │ ├── nginx.conf │ └── supervisor.conf ├── manage.py ├── pylintrc ├── requirements.txt ├── tests │ └── __init__.py └── wsgi.py
ここで簡単な紹介:
アプリケーション:プロジェクトのすべての論理コードはここに配置されます
config:プロジェクトの構成ファイル
デプロイ:デプロイメント関連ファイル
tests:ユニットテストコードが配置されているディレクトリファイル:
manage.py:Flask-スクリプト実行ファイル
pylintrc:pylint標準
プロジェクト依存ライブラリのrequirements.txtリスト
wsgi.py:wsgi run
これはrequirements.txtファイルの内容です:
1 2 3 4 5 6
Flask==0.10 .1 flask-mongoengine==0.7 .5 Flask-Login==0.3 .2 Flask-Admin==1.4 .0 Flask-Redis==0.1 .0 Flask-WTF==0.12
ボイラープレート
では、コードをどこに置くのでしょうか?
ルートコードをに配置します application/controllers
モデルコードをに配置します application/models
。
初期化バインディングアプリのコードを application/init.py
。
データベースを config/development.py
ファイル。
最後に、manager.pyファイルが書き込まれます。 ここでは、いくつかの重要なファイルについて概説します。
ファイルmanager.py
1 2 3 4 5 6 7 8 9 10 11 12 13
from flask.ext.script import Managerfrom application import create_appPORT = 8080 app = create_app() manager = Manager(app) @manager.command def run () : """Run app.""" app.run(port=PORT) if __name__ == "__main__" : manager.run()
application / init.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
import sysimport osproject_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..' )) if project_path not in sys.path: sys.path.insert(0 , project_path) import loggingfrom flask import Flaskfrom flask_wtf.csrf import CsrfProtectfrom config import load_configfrom application.extensions import db, login_managerfrom application.models import Userfrom application.controllers import user_bptry : reload(sys) sys.setdefaultencoding('utf8' ) except (AttributeError, NameError): pass def create_app () : """Create Flask app.""" config = load_config() print config app = Flask(__name__) app.config.from_object(config) if not hasattr(app, 'production' ): app.production = not app.debug and not app.testing CsrfProtect(app) if app.debug or app.testing: app.logger.addHandler(logging.StreamHandler()) app.logger.setLevel(logging.ERROR) register_extensions(app) register_blueprint(app) return app def register_extensions (app) : """Register models.""" db.init_app(app) login_manager.init_app(app) login_manager.login_view = 'login' @login_manager.user_loader def load_user (user_id) : return User.objects(id=user_id).first() def register_blueprint (app) : app.register_blueprint(user_bp)
application / controllers / init.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import jsonfrom flask import Blueprint, request, jsonifyfrom flask.ext.login import current_user, login_user, logout_userfrom application.models import Useruser_bp = Blueprint('user' , __name__, url_prefix='' ) @user_bp.route('/login', methods=['POST']) def login () : info = json.loads(request.data) username = info.get('username' , 'guest' ) password = info.get('password' , '' ) user = User.objects(name=username, password=password).first() if user: login_user(user) return jsonify(user.to_json()) else : return jsonify({"status" : 401 , "reason" : "Username or Password Error" }) @user_bp.route('/logout', methods=['POST']) def logout () : logout_user() return jsonify(**{'result' : 200 , 'data' : {'message' : 'logout success' }}) @user_bp.route('/user_info', methods=['POST']) def user_info () : if current_user.is_authenticated: resp = {"result" : 200 , "data" : current_user.to_json()} else : resp = {"result" : 401 , "data" : {"message" : "user no login" }} return jsonify(**resp)
config / development.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import osclass DevelopmentConfig (object) : """Base config class.""" DEBUG = False TESTING = False SECRET_KEY = "your_key" PROJECT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..' )) SITE_TITLE = "title" SITE_DOMAIN = "http://localhost:8080" MONGODB_SETTINGS = { 'db' : 'your_database' , 'host' : 'localhost' , 'port' : 27017 }
関連コース: Python Flask:Flaskを使用してWebアプリを作成する
Hope this helps!
Source link