当前位置:   article > 正文

1. 2 Flask介绍与第一个程序_查看flask版本

查看flask版本

一、 Flask理论简要介绍

   Flask 基于Python语言编写的轻量级Web应用框架,凭借更灵活、轻便、安全且易上手的特性,成为奇特常用的Pyhton框架之一
   Flask基于Python开发且依赖jinja2模板(用于:控制前端) 和 Werkzeug WSGI服务(控制函数路由)的一个微型框架,其中,Werkzeug WSGI服务
本质上Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给
用户,如果要返回给用户复杂的内容时,需要借助jinja2模板l来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器
  • 1
  • 2
  • 3
  • 4

框架特点:

 1、 Flask自由、灵活、可扩展性强,第三方库的选择面广开发时可以结合自己喜欢的轮子,也能结合最流行最强大的python库
 2、 入门简单,拥有python基础,即使没有多少web开发经验,也会很快做出网站
 3、 适用于中小型网站
 4、 适用于开发Web服务的API
 5、 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验
  • 1
  • 2
  • 3
  • 4
  • 5

二、Flask两大核心

1 Werkzeug

  实现路由、调试和Web服务器网关接口  ; 是一个遵循WSGI协议的python函数库
  -- WSGI : Web Server Gateway Interface
  -- 其内部实现了很多web框架底层的东西,比如:request和response对象
  -- 与WSGI规范的兼容,支持Unicode
  -- 支持最基本的会话管理和签名Cookies
  -- 集成URL请求路由等
  Werkzeug库和routing模板负责实现URL解析
  不同的URL对应不同的视图函数,routing模块会对请求信息的URL进行解析,匹配到URL对应的视图函数,执行该函数以此生成一个响应信息
  routing模块内部有: Rule类用来构造不同的URL模式的对象,路由由URL规则
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2 Jinja2

  实现了模板
  • 1

三、 Flask架构模式–MTV VS MVC

1、架构模式

1) MVC介绍
 M --- Model,数据模型,负责数据的存取
 V --- View,视图,负责页面的展示逻辑
 C --- Controller,控制器,负责业务逻辑的处理
  • 1
  • 2
  • 3
2) MTV介绍
 M --- Model,数据模型,负责业务对象与数据库的对象(ORM)
       Flask- PyMongo/Flask-MongoKit
       Flask- SQLAlchemy
 T --- Template,模板,负责将数据展示给用户
       Jinja2
 V ---View,视图,负责业务逻辑,并在使用的时候调用:Model和Template
      Flask-WTF/bootstrap-flask/Flask-Uploads
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

四、 Flask与Django对比

1、相似之处

1) 都是Python Web开发框架
能够使用python在服务端创建web应用,并使用html和css作为前端,或者使用其它任何前端框架
  • 1
2) 可以使用ORM或对象关系映射
可以使用:SQLITE、MYSQL、PostgreSQL 和其它领用ORM框架
--- Django默认使用ORM
--- Flask默认情况下不具备ORM功能,需要时可手动添加它
  • 1
  • 2
  • 3
3) 模板
--- Djangp使用类似于Jinja的引擎(实际上,Jinja的灵感来源于Django自己的模板系统)
--- Flask使用Jinja作为模板引擎
--- Jinja基本上就像HTML的Python(  python+html=Jinja),它能够向HTML添加逻辑,例如:if/else for循环等
  • 1
  • 2
  • 3

2、不同之处

1) Flask
-- 轻量级, 被称作Micro Framework,在网站设计放面Flask各方面性能均等于或优于Django
-- Django自带的或第三方好评如潮的功能,Flask上总会找到与之类似第三方库Flask灵活开发
-- Python高手基本都会喜欢Flask, 但对Django却可能褒贬不一
-- Flask与关系型数据库的配合使用不弱于Django,而与其NoSQL数据库的配合远远优于Django
-- Flask比Django更加Pthonic, 与python的philosophy
  • 1
  • 2
  • 3
  • 4
  • 5
2) Django
-- Django太重,除了web框架,自带ORM和模板引擎,灵活和自由度不高
-- Django能开发小应用, 但总会有“杀鸡焉用牛刀”
-- Django的自带ORM非常优秀,综合评价略高于SQLAIchemy
-- Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja
-- Django自带ORM也使Djangp与关系型数据库耦合度过高,如果想使用MongoDB等NOSQL数据库,需要选取合适的第三方库,
   其实:Django+SQL结合最搭配
-- Django目前支持Jinja等非官方模板引擎
-- Django自带的数据库管理app好评如潮
-- Django非常适合企业级网站的开发: 快速、靠谱、稳定Django成熟、稳定、完善,但相比于Flask, Django的整体生态
   相对封闭
-- Django是Python Web框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找
   到与之对应的移植
-- Django上手也比较容易,开发文档详细、完善,相关资料丰富
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

五、一个简单的Flask应用

 首先安装: pip install flask
  • 1
from flask import Flask

# 创建一个Flask实例
app = Flask(__name__)


@app.route("/")
def index():
    # url对应的函数
    return "Hello World"


if __name__ == "__main__":
    # 由python内置服务器nginx调配
    # 这个不是作为模块导入的时候运行,比如这个文件为aa.py,当python aa.py就执行这个代码。如果是在其它文件import的话,不执行这个文件
    # 运行Flask的应用(启动Flask服务),默认会开启5000的端口提供测试访问
    # 如需调试,将app.run()改为app.run(debug=True)即可,这样每次修改之后,不需要每次都重启服务器
    app.run(debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

终端运行结果:
在这里插入图片描述

1、 查看已安装的Flask版本
   --- 检验是否已安装, 进入python解释器中,输入: import flask 后回车,如果无反应代表未安装
   --- 检查flask版本, python解释器中,输入:flask.__version__
2、在线安装flask
   -- sudo pip3 install flask / pip install flask
3、导入使用
   from flask import Flask
   # 当前运行的主程序构建成Flask应用,以便接收用户的请求(request) 并给出响应

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

六、Flask项目开始开启

1、Flask简洁目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9OzXW4lj-1666406358287)(…/flask_notes_pictures/Flask目录结构.png)]

2、 Flask环境配置

社区版额Pycharm需要自己手动创建flask简单的框架结构
专业版的pycharm可以直接New Project选择项目类型,如下图所示
  • 1
  • 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdXJoB4l-1666406358288)(…/flask_notes_pictures/pycharm_Flask环境设置.png)]

运行项目时,需要切入虚拟环境中,项目运行命令:默认直接运行app.py(否则需要指定运行文件)-powershell
环境变量设置时,需处于项目目录下
1) $env: FLASK_APP="app" # 设置环境变量
2) $env: FLASK_ENV ="development" # 开启调试模式
3) flask run --host=127.0.0.1  --port=3882 --with-thread
  • 1
  • 2
  • 3
  • 4
  • 5

3、配置与访问

项目结构介绍:
-- 项目名
  |--- static  (js/css)静态
  |--- templates(模板)(html)
  |--- app.py(运行/启动)
windows命令行终端-运行Flask项目: 
   1) set FLASK_APP=app.py(你需要运行的py文件)
   2) flask run(成功后即可访问网址)
run(host="ip地址",port="端口号")
静态配置:
     app.config['ENV'] = 'development'  # 默认production  生产
     1) 激活调试器
     2) 激活自动重载
     3) 打开Flask应用的调试模式
        app.config['debug'] = True 
     PS终端命令强制配置: $Env:FLASK_ENV = 'development'
setting.py存在配置: 
     ENV = 'development'
     DEBUG = True
     app.config.from_object(settings) # app.py中加载配置变量

PS控制台:
    进入虚拟环境目录下: cd 虚拟环境Script目录下
    激活并使用虚拟环境:  .\activate   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

4、 路由的变量规则

  注:路由就是为了匹配用户请求地址以及对应的视图函数
    @app.route("/index") ---》app.add_url("/index",view_func=index) #路由不以装饰器形式时使用,
 这个装饰器其实就是通过add_url_rule将rule字符串跟视图函数进行绑定
  • 1
  • 2
  • 3
路由变量规则(“/”表示整个网关的根路径)
 1) 在URL中添加变量
     @app.route("/getcity/<key>")
 2) 加类型转换器,为变量指定规则
    @app.route("/add/<int:num>")
    @app.route("/path/<path:subpath>")
    转换器类型有:String\int\float\path\uuid
 3) 唯一的URL “/” 重定向行为:
   @app.route("/index") 和 @app.route("/index/")区别 ---- 前者不包含后者,但后者包含前者
 路由规则中可以传递多个参数,对于flask来说,所有视图函数都必须有返回值,否则当参数不符合if条件时会报错
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
return返回值类型
返回值: 其实就是Response响应对象font color= "red" >Hello Word
  • 1
1)、 加前端样式
return < font color="red">Hello World!<font>
  • 1
2)、 字符串
3)、 Response对象
@app.route('/getcity/<string:city>')
def getcity_all(city):  # put application's code here
    """单参数"""
    # 返回Response对象
    return Response(data.get(city))
  • 1
  • 2
  • 3
  • 4
  • 5
4) 字典
return {"a": "北京", "b": "上海", "c": "西安"}
  • 1
5) 元组
return a,b,c
  • 1
Flask之request对象
request.headers
request.path
request.full_path
request.url
  • 1
  • 2
  • 3
  • 4
视图函数与模板结合–渲染模板

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOgfTXqt-1666406358290)(…/flask_notes_pictures/视图函数与模板结合_模板渲染.png)]

   流程图: 根据路由规则表找到匹配的函数--->执行函数---》 rener_template()方法---》模板引擎i寻找templates的register.html---->
 转换成字符串形式---》 通过视图函数的return将字符串返回---》给客户端浏览器
   疑问: 默认去模板文件夹中找文件夹的,怎么知道文件夹就是templates???
   答复:因为app=Flask(__name__)
 Flask自动为你配置Jinja2模板引擎
 使用render_template()方法可以渲染模板,只要提供模板名称和需要作为参数传递给模板的变量
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
模板的渲染
 1) 作用: 在视图中,将模板文件西安渲染成字符串,再响应给客户端浏览器
 2)函数:
    from flask import render_template
    str = render_tempalte(‘模板名称.html’)
  • 1
  • 2
  • 3
  • 4
获取页面提交的内容
前端:
   - 点击submit默认执行action动作
   - 如果是表单提交必须再表单的元素上添加name属性
后端:
   - request.full_path 
   - request.path
注意:
   模板路由中注明请求方式: @app.route('/introduce/<string:nickname>/<int:age>/', methods=['GET', 'POST'])
   Get请求 ----args: dict类型
       requst.args :  所有参数数据---返回字典
       request.args.get('参数名称')
   Post请求--form 输出结果同上
       request.form
       request.form.get('参数名称')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
修改配置
app.run(debug=True, port=5000,
        template_folder="",  # 存放模板文件夹名
        static_folder="",    # 存放静态文件文件夹名
        static_url_path="")       # 静态文件访问路径
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/380629
推荐阅读
相关标签
  

闽ICP备14008679号