赞
踩
Flask 基于Python语言编写的轻量级Web应用框架,凭借更灵活、轻便、安全且易上手的特性,成为奇特常用的Pyhton框架之一
Flask基于Python开发且依赖jinja2模板(用于:控制前端) 和 Werkzeug WSGI服务(控制函数路由)的一个微型框架,其中,Werkzeug WSGI服务
本质上Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给
用户,如果要返回给用户复杂的内容时,需要借助jinja2模板l来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器
1、 Flask自由、灵活、可扩展性强,第三方库的选择面广开发时可以结合自己喜欢的轮子,也能结合最流行最强大的python库
2、 入门简单,拥有python基础,即使没有多少web开发经验,也会很快做出网站
3、 适用于中小型网站
4、 适用于开发Web服务的API
5、 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验
实现路由、调试和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规则
实现了模板
M --- Model,数据模型,负责数据的存取
V --- View,视图,负责页面的展示逻辑
C --- Controller,控制器,负责业务逻辑的处理
M --- Model,数据模型,负责业务对象与数据库的对象(ORM)
Flask- PyMongo/Flask-MongoKit
Flask- SQLAlchemy
T --- Template,模板,负责将数据展示给用户
Jinja2
V ---View,视图,负责业务逻辑,并在使用的时候调用:Model和Template
Flask-WTF/bootstrap-flask/Flask-Uploads
能够使用python在服务端创建web应用,并使用html和css作为前端,或者使用其它任何前端框架
可以使用:SQLITE、MYSQL、PostgreSQL 和其它领用ORM框架
--- Django默认使用ORM
--- Flask默认情况下不具备ORM功能,需要时可手动添加它
--- Djangp使用类似于Jinja的引擎(实际上,Jinja的灵感来源于Django自己的模板系统)
--- Flask使用Jinja作为模板引擎
--- Jinja基本上就像HTML的Python( python+html=Jinja),它能够向HTML添加逻辑,例如:if/else for循环等
-- 轻量级, 被称作Micro Framework,在网站设计放面Flask各方面性能均等于或优于Django
-- Django自带的或第三方好评如潮的功能,Flask上总会找到与之类似第三方库Flask灵活开发
-- Python高手基本都会喜欢Flask, 但对Django却可能褒贬不一
-- Flask与关系型数据库的配合使用不弱于Django,而与其NoSQL数据库的配合远远优于Django
-- Flask比Django更加Pthonic, 与python的philosophy
-- 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上手也比较容易,开发文档详细、完善,相关资料丰富
首先安装: pip install flask
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、 查看已安装的Flask版本
--- 检验是否已安装, 进入python解释器中,输入: import flask 后回车,如果无反应代表未安装
--- 检查flask版本, python解释器中,输入:flask.__version__
2、在线安装flask
-- sudo pip3 install flask / pip install flask
3、导入使用
from flask import Flask
# 当前运行的主程序构建成Flask应用,以便接收用户的请求(request) 并给出响应
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9OzXW4lj-1666406358287)(…/flask_notes_pictures/Flask目录结构.png)]
社区版额Pycharm需要自己手动创建flask简单的框架结构
专业版的pycharm可以直接New Project选择项目类型,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
项目结构介绍: -- 项目名 |--- 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
注:路由就是为了匹配用户请求地址以及对应的视图函数
@app.route("/index") ---》app.add_url("/index",view_func=index) #路由不以装饰器形式时使用,
这个装饰器其实就是通过add_url_rule将rule字符串跟视图函数进行绑定
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条件时会报错
返回值: 其实就是Response响应对象font color= "red" >Hello Word
return < font color="red">Hello World!<font>
@app.route('/getcity/<string:city>')
def getcity_all(city): # put application's code here
"""单参数"""
# 返回Response对象
return Response(data.get(city))
return {"a": "北京", "b": "上海", "c": "西安"}
return a,b,c
request.headers
request.path
request.full_path
request.url
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOgfTXqt-1666406358290)(…/flask_notes_pictures/视图函数与模板结合_模板渲染.png)]
流程图: 根据路由规则表找到匹配的函数--->执行函数---》 rener_template()方法---》模板引擎i寻找templates的register.html---->
转换成字符串形式---》 通过视图函数的return将字符串返回---》给客户端浏览器
疑问: 默认去模板文件夹中找文件夹的,怎么知道文件夹就是templates???
答复:因为app=Flask(__name__)
Flask自动为你配置Jinja2模板引擎
使用render_template()方法可以渲染模板,只要提供模板名称和需要作为参数传递给模板的变量
1) 作用: 在视图中,将模板文件西安渲染成字符串,再响应给客户端浏览器
2)函数:
from flask import render_template
str = render_tempalte(‘模板名称.html’)
前端:
- 点击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('参数名称')
app.run(debug=True, port=5000,
template_folder="", # 存放模板文件夹名
static_folder="", # 存放静态文件文件夹名
static_url_path="") # 静态文件访问路径
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。