美文网首页
在PyCharm中构建一个标准Flask工程

在PyCharm中构建一个标准Flask工程

作者: devilyaos | 来源:发表于2017-03-16 17:26 被阅读0次

    基础环境搭建

    置顶条件是装python,此处不表。

    虚拟环境设置

    在File -> setting -> Project -> Project Interpreter 中,在路径旁的设置中选择Create VirtualEnv,在工程根目录下建立venv目录用来管理虚拟环境。设置好虚拟环境后,点击下方列表右侧的+号即可添加依赖,当然此处用命令行也是一样的。

    建立配置文件

    在工程根目录在新建config.py,其中内容为:

    import os
    
    basedir = os.path.abspath(os.path.dirname(__file__))
    
    
    class Config:
        SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
        SQLALCHEMY_COMMIT_ON_TEARDOWN = True
        FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'
        FLASKY_MAIL_SENDER = 'Flasky Admin <flasky>@example.com'
        FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
    
        @staticmethod
        def init_app(app):
            pass
    
    
    # 开发环境配置
    class DevelopmentConfig(Config):
        DEBUG = True
        SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
                                  'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    
    # 测试环境配置
    class TestingConfig(Config):
        TESTING = True
        WTF_CSRF_ENABLED = False
        SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
                                  'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    
    # 生产环境配置
    class ProductionConfig(Config):
        SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
                                  'sqlite:///' + os.path.join(basedir, 'data.sqlite')
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    
    config = {
        'development': DevelopmentConfig,
        'testing': TestingConfig,
        'prodection': ProductionConfig,
    
        'default': DevelopmentConfig
    }
    
    

    建立启动文件

    在工程根目录下建立manage.py,其中内容为:

    import os
    from flask_migrate import Migrate, MigrateCommand
    from flask_script import Manager, Shell
    from app import create_app, db
    
    app = create_app(os.getenv('FLASK_CONFIG') or 'default')
    manager = Manager(app)
    migrate = Migrate(app, db)
    
    
    def make_shell_context():
        return dict(app=app, db=db)
    
    
    manager.add_command("shell", Shell(make_context=make_shell_context))
    manager.add_command("db", MigrateCommand)
    
    
    @manager.command
    def test():
        """run the unit tests."""
        import unittest
        tests = unittest.TestLoader().discover('tests')
        unittest.TextTestRunner(verbosity=2).run(tests)
    
    
    if __name__ == '__main__':
        manager.run()
    
    

    锁定依赖

    在Terminal中,先检查是否为(venv)的虚拟环境标识,然后再虚拟环境的命令行下输入pip freeze > requirements.txt,请确保每次更新包依赖后重新更新此文件,即重新执行本命令。

    当从别处导入工程时,可以执行pip install -r requirements.txt,来保持依赖环境相同。

    删除初始入口文件

    删除新建工程时,系统自建的以工程名为名称的py文件,我们需要入口文件在app文件夹中。

    设置app/init.py

    在工程根目录下新建app文件夹,并在其下的init.py中填充如下内容:

    # coding=utf-8
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from config import config
    
    db = SQLAlchemy()
    
    
    def create_app(config_name):
        app = Flask(__name__)
        app.config.from_object(config[config_name])
        config[config_name].init_app(app)
    
        db.init_app(app)
    
        # 注册蓝本
        # 增加auth蓝本
        from .main import main as main_blueprint
        app.register_blueprint(main_blueprint)
    
        # 附加路由和自定义的错误页面
        return app
    
    

    其中的蓝本内容为下述表述的蓝本文件

    设置app/main/init.py

    Flask 使用蓝本来定义路由,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上后,路由真正成为程序的一部分。蓝本通常使用结构化的方式保存在包的多个模块中。蓝本管理路由后,由蓝本实例对象来取代 app。如无目录请自行建立.
    此处代码如下:

    from flask import Blueprint
    
    # 实例化 Blueprint 类,两个参数分别为蓝本的名字和蓝本所在包或模块,第二个通常填 __name__ 即可
    main = Blueprint('main', __name__)
    
    # 为避免循环导入依赖,故写在最后
    from . import views, errors
    
    

    设置app/main/views.py

    尝试写一个页面的业务

    from flask import render_template
    # 导入蓝本 main
    from . import main
    
    
    @main.route('/')
    def index():
        return render_template('index.html')
    
    

    设置模板

    Flask的默认模板引擎是用的Jinja(python3使用的是Jinja2),模板目录约定在templates中(类似SpringBoot中的resource)。我们在其中建立一个index的页面和一个error页面。

    • index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>    
        <meta charset="UTF-8">    
        <title>index</title>
    </head>
    <body>
    <h1>Hello Flask</h1>
    </body>
    </html>
    
    • 404.html
    <!DOCTYPE html>
    <html lang="en">
    <head>    
        <meta charset="UTF-8">    
        <title>Not Found</title>
    </head>
    <body>
    <h1>Can't find request page!</h1>
    </body>
    </html>
    

    设置app/main/errors.py

    代码如下:

    from flask import render_template
    from . import main
    
    
    @main.app_errorhandler(404)
    def page_not_found(e):
        return render_template('404.html'), 404
    
    

    运行

    在Terminal中输入python manage.py runserver,即可运行调试。

    结尾

    本文参考了(http://www.jianshu.com/p/cc90a14856c5)[http://www.jianshu.com/p/cc90a14856c5]与(http://blog.csdn.net/yannanxiu/article/details/52192849)[http://www.jianshu.com/p/cc90a14856c5],侵删,本地已调通。

    相关文章

      网友评论

          本文标题:在PyCharm中构建一个标准Flask工程

          本文链接:https://www.haomeiwen.com/subject/ctyjnttx.html