最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • flask怎么初始化配置文件和使用

    正文概述    2020-01-05   298

    flask怎么初始化配置文件和使用

    项目环境配置

    安装python环境

    校验python 和pip是否安装好

    //查看python安装
    python -V
    //查看pip安装
    pip -V

    新建项目文件夹 demo

    mkdir flaskdemo
    cd flaskdemo

    安装 pipenv

    pip install pipenv
    # 这个是进行虚拟环境管理的工具,不同的项目分割不同的环境

    进入到项目文件夹下,安装虚拟环境

    //创建虚拟环境,如果里面有配置文件,会直接安装配置中的插件
    pipenv install
    //激活虚拟环境
    pipenv shell
    //退出
    exit
    //卸载包
    pipenv uninstall flask
    //查看包依赖关系
    pipenv graph
    //进入虚拟环境中,查看虚拟环境的安装目录
    pipenv --venv

    tips:在windows退出环境时没有提示,linux有提示

    安装各种包:一下为基础通用的各种包,选择安装。

    # 安装flask
    pipenv install flask
    # mysql驱动
    pinenv install cymysql==0.9.1   
    # web登录插件   
    pipenv install flask-login
    # email插件
    pipenv install flask-mail
    # 表单字段校验插件
    pipenv install WIForms
    # 请求库插件
    pipenv install requests
    # 数据库映射插件
    pipenv install Flask-SQLAlchemy
    # 验证登录相关
    Flask-HTTPAuth==2.7.0
    # 其他相关
    Flask-Cors==2.1.0
    Flask-WTF==0.14.2

    开发工具: Pycharm,Xampp(mysql),Navicat(数据库可视化工具)

    项目的初始化

    新建配置文件:新建文件目录 app/config, 新建配置文件 secure.py 和 settings.py,主要存储项目中的配置信息

    创建自定义 app/libs/redprint.py flask默认的是blueprint主要用作模块的区分,不建议为了分离视图是用 blueprint,可以优化url的路径

    # 根据 blueprint源码的实现
    class RedPrint:
        def __init__(self, name):
            self.name = name
            self.mound = []
    
        def route(self, rule, **options):
            def decorator(f):
                self.mound.append((f, rule, options))
                return f
    
            return decorator
    
        def register(self, bp, url_prefix=None):
            """
            将 redprint注册到 blueprint,实际调用 blueprint代码
            """
            if url_prefix is None:
                url_prefix = '/' + self.name
            for f, rule, options in self.mound:
                endpoint = options.pop("endpoint", f.__name__)
                bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

    创建视图函数文件

    from app.libs.redprint import RedPrint
    
    api = RedPrint('book')
    
    @api.route('/create')
    def create_book():
        return 'create_book'
    
    @api.route('/get')
    def get_book():
        return 'get_book'
    
    ------------------------------------------------------
    
    from app.libs.redprint import RedPrint
    
    api = RedPrint('user')
    
    # url /v1/user/create
    
    @api.route('/create')
    def create_user():
        return 'create_user'
    
    @api.route('/get')
    def get_user():
        return 'get_user'

    在 v1/init.py 注册 redprint

    from flask import Blueprint
    from app.api.v1 import book
    from app.api.v1 import user
    
    def create_blueprint_v1():
        """
        创建 blueprint 并对 自定义的 redprint进行注册
        :return:
        """
        bp_v1 = Blueprint("v1",__name__)
        book.api.register(bp_v1, url_prefix='/book')
        user.api.register(bp_v1, url_prefix='/user')
        return bp_v1

    新建 ginger/app.py文件,flask核心对象相关的初始化的操作

    tips:进入之后,可能包不能导入,需要自己手动确认设置虚拟环境

    from flask import Flask
    def register_blueprint(app):
        from app.api.v1 import create_blueprint_v1
        blueprint = create_blueprint_v1()
        app.register_blueprint(blueprint, url_prefix='/v1')def create_app():
        app = Flask(__name__)    # 导入配置文件
        app.config.from_object('app.config.settings')
        app.config.from_object('app.config.secure')    # 注册blueprint
        register_blueprint(app)    return app

    其他相关

    from flask import Flask
    app = Flask(__name__)
    # 导入配置文件,导入的是模块,app.config 是dict的子类
    app.config.from_object('config')
    # 定义路由规则
    @app.route("/hello/") #这种方式底层也是通过 add_url_rule实现的
    def hello():
        # 这种方式为函数视图
        # 另外一种基于类的视图(即插视图),可以复用便于扩展
        return "hello word"
    # 启动,配置debug=true表明为debug模式,每次修改代码保存之后,会列出详细错误信息,服务器会自动重启,不用自己手动重启
    #  这种方式的话不能被外网,局域网访问,只能通过 127.0.0.1这种方式访问
    #  将host =‘0.0.0.0’的方式支持外网访问
    # if 中的语句只在入口文件中执行
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000, debug=app.config['DEBUG'])

    URL配置说明

    url配置为 "/hello/",可以兼容 url为hello,和url为hello/ 的情况,这种方式flask是通过 url重定向来实现的,
    为了是保证url的唯一性,跟seo的优化有关系. 
    一般直接配置为 /hello
    
    def hello():这种为函数视图的方式,还有另外一种方式,为基于类的视图(即插视图),基于类可以复用便于扩展

    路由注册方式

    #这种方式为装饰器的方式,查看源码底层也是采用的是 app.add_url_rule这种方式注册的
    @app.route("/hello/")
    
    #直接配置注册的方式,基于类的视图这种,必须是这种方式
    app.add_url_rule('/hello',view_func=hello)

    app.run()参数

    默认的app.run(debug=True),这种方式是不能被外网,局域网访问,只能通过127.0.0.1这种方式访问
    
    将host修改为 '0.0.0.0',可以允许外网访问,可以指定端口
    app.run(host='0.0.0.0',port=5000,debug=True)

    统一配置文件:一般的环境切换更改等方式通过配置文件的方式来,不易出错
    创建配置文件 config.py

    #config.py 配置示例
    # encoding: utf-8
    DEBUG =True     
    一种方式:直接导入的方式
    from config import DEBUG
    app.run(debug=TEBUG)
    导入模块的方式,注意路径,此时 config文件与 app同级,推荐这种方式
    app.config.form_object('config')
    **tips**
    通过app.config 导入的方式,获取值的时候 key 必须大写,app.config['DEBUG'],否则会出错.
    app.config['DEBUG'],即使在配置文件没有配置该 DEBUG,打印的时候 也会有值 false ,因为 DEBUG 是在app.config 默认参数,
    如果要覆盖该 DEBUG值,在配置文件中必须大写

    tips:可能存在需要导包的情况,需要设置虚拟环境

    file->settings->procject->project interpreter ->选择对应的虚拟环境即可

    Restful

    实际经验区分:

    标准的restful 适合对外提供,不用考虑太多的业务逻辑

    在内部项目中,如有多个资源,需要同时操作,那需要多次的 http请求,而且对资源的设计需要很高的要求。


    起源地下载网 » flask怎么初始化配置文件和使用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元