Flask工程搭建及路由和蓝图

Flask工程搭建及路由和蓝图

  1. 简介

    Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM窗体验证工具文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

  2. 与django对比

    django提供了:django-admin快速创建项目工程目录,manage.py 管理项目工程,orm模型(数据库抽象层),admin后台管理站点,缓存机制,文件存储系统,用户认证系统,而这些,flask都没有,都需要扩展包来提供。

    django是一个重量级框架,它提供了丰富的组件,可以让我们快速构建web应用

    flask是一个轻量级框架,它只提供了路由核心和jinja2模板引擎

  3. 常用扩展包

    扩展列表:http://flask.pocoo.org/extensions/

    • Flask-SQLalchemy:操作数据库;
    • Flask-script:插入脚本;
    • Flask-migrate:管理迁移数据库;
    • Flask-Session:Session存储方式指定;
    • Flask-WTF:表单;
    • Flask-Mail:邮件;
    • Flask-Bable:提供国际化和本地化支持,翻译;
    • Flask-Login:认证用户状态;
    • Flask-OpenID:认证;
    • Flask-RESTful:开发REST API的工具;
    • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
    • Flask-Moment:本地化日期和时间;
    • Flask-Admin:简单而可扩展的管理接口的框架
  4. Flask文档
    1. 中文文档(http://docs.jinkan.org/docs/flask/)
    2. 英文文档(http://flask.pocoo.org/docs/1.0/)
  5. Flask的HelloWorld程序
    # 导入Flask类
    from flask import Flask
    
    #Flask类接收一个参数__name__
    app = Flask(__name__)
    
    # 装饰器的作用是将路由映射到视图函数index
    @app.route('/')
    def index():
        return 'Hello World'
    
    # Flask应用程序实例的run方法启动WEB服务器
    if __name__ == '__main__':
        app.run()
    
  6. 参数说明
    # import_name: 导入模块的名字,给Flask寻找静态资源用的。固定__name__
    # static_url_path: 静态资源的路由 / + 'static'
    # static_folder: 静态资源文件夹 static
    # templates_folder: 模板文件夹 templates
    
  7. 开发服务器启动方式
    1. 终端运行

      # 导入环境变量
      export FLASK_APP=helloworld
      # 运行命令
      flask run
       * Running on http://127.0.0.1:5000/
      
      • 环境变量 FLASK_APP 指明flask的启动实例

      • flask run -h 0.0.0.0 -p 8000 绑定地址 端口

      • flask run --help获取帮助

      • 生产模式与开发模式的控制

        通过FLASK_ENV环境变量指明

        • export FLASK_ENV=production 运行在生产模式,未指明则默认为此方式
        • export FLASK_ENV=development运行在开发模式
    2. pycharm运行

      1. 设置环境变量
        在这里插入图片描述

      2. 运行命令

        新版
        在这里插入图片描述

        旧版
        在这里插入图片描述

  8. 查看路由方式
    # 1.新版flask
    export FLASK_APP=app所在模块
    export FLASK_ENV=工作模式(production生产模式, development调试、开发模式)
    flask routes
    # 2.打印app.url_map
    print(app.url_map)
    # 3.使用app.url_map构造一个接口返回(希望大家掌握)
    @app.route("/")
    def index()
    	data = {}
    	for i in app.url_map.iter_rules():
    	data[i.endpoint] = i.rule
    	return json.dumps(data) 
    	# return jsonify(data)
    
  9. Flask三种配置参数设置方式
    # flask对象中,是使用app.config存放所有的配置参数
    # app.config 可以简单的理解是一个字典
    # 设置: app.config['key'] = 'value'
    # 获取: app.config.get('key') (建议写法) app.config['key'] (不存在就会报错) 	
    # 方式一: 从配置类中加载(方便,是常用的)
    class Config(object):
    	REDIS = 'redis://127.0.0.1/1'
    
    app.config.from_object(Config)
    
    # 方式二: 从配置文件中加载(安全,一般使用第三种替代)
    config.ini:
    REDIS = 'redis://127.0.0.1/1'
    app.config.from_pyfile('config.ini')
    
    # 方式三: 从环境变量中加载,本质是从文件中加载,环境变量的值就是文件的路径 
    # 可以是相对路径,也可以是绝对路径 (灵活, 安全)
    export CONFIG=/home/python/Desktop/config.ini
    app.config.from_envvar('CONFIG')
    
  10. 创建Flask对象工厂函数 (封装配置)
    def create_app(config):
      		app = Flask(__name__)
      		# 通过两种加载配置的方式加载
      		# 1.使用方式一
      		app.config.from_object(config)
      		# 2.使用方式三
      		app.config.from_envvar('CONFIG', silent=True)
      		return app
    
  11. 能够使用methods限定Flask视图的请求方式
    # GET POST PUT PATCH DELETE
    # GET
    @app.route('/', methods=['GET', 'POST'])
    def index():
    	return ''
    
  12. OPTIONS和HEAD请求方法的作用
    HEAD:
    	只返回首部,一般用于检查超链接。
    OPTIONS:
    	1.返回接口路由允许的请求方式。
    	2.跨域前预检测
    		2.1设置两个本地host指向127.0.0.1
    		2.2编写两个接口,在一个接口返回页面,并在页面中对另外一个接口请求数据。
    		2.3不设置跨域,看效果
    		2.4设置跨域,看效果
    

    展示效果

    from flask import Flask, render_template
    from flask_cors import CORS
    
    app = Flask(__name__)
    
    # 允许跨域
    CORS(app)
    
    @app.route('/')
    def index():
        return render_template('d06_options.html')
    
    @app.route('/index2')
    def index2():
        return 'index2'
    
    if __name__ == '__main__':
        app.run(debug=True)
    
  13. 能够在Flask中使用蓝图
    # 导入Flask类
    from flask import Flask, Blueprint
    
    app = Flask(__name__, static_url_path='/static', static_folder='static')
    
    # 1.创建蓝图对象
    user_bp = Blueprint("user", "__name__")
    
    # 2.使用蓝图对象定义路由和视图函数
    @user_bp.route('/')
    def index():
        return 'Hello World'
    
    # 3.把蓝图对象注册到app中
    app.register_blueprint(user_bp)
    
    # Flask应用程序实例的run方法启动WEB服务器
    if __name__ == '__main__':
        app.run()
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值