Flask框架第一篇.Flask框架基础
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用
2.Flask和Django对比
Django框架 | Flask框架 | |
---|---|---|
Admin(基于Model) | 原生无 | |
Model | 原生无 | |
Form | 原生无 | |
Session | 有(但颠覆认知) | |
教科书式框架 | 轻量级框架(以简单为基准 开发 一切从简 能省则省) | |
优势 | 组件全,功能全,教科书 | 轻,快 |
劣势 | 占用资源,创建复杂度较高 | 先天不足,第三方组件稳定性较差 |
3.安装
pip install flask
#注意: 不要使用工具中的插件创建 Flask项目
4 Flask依赖包
4.1 jinjia2
-
模板语言,就是Django中的 templates
https://www.cnblogs.com/DragonFire/p/9259999.html
就是django中的template # {{ }} 引用或执行 # {% %} 逻辑代码
STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'} #注意:后面加 , 会报错 ? STUDENT_LIST = [ {'name': 'Old', 'age': 38, 'gender': '中'}, {'name': 'Boy', 'age': 73, 'gender': '男'}, {'name': 'EDU', 'age': 84, 'gender': '女'} ] ? STUDENT_DICT = { 1: {'name': 'Old', 'age': 38, 'gender': '中'}, 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, } ? ? from flask import Flask, render_template ? app = Flask(__name__) ? # app.config["DEBUG"] = True app.debug = True ? @app.route("/") def home(): return render_template("stu.html",stu=STUDENT,stu_list=STUDENT_LIST,stu_dict=STUDENT_DICT) ? if __name__ == "__main__": app.run("0.0.0.0",9527)
{{ stu }}
name | age | gender |
---|---|---|
{{ stu.name }} | {{ stu["age"] }} | {{ stu.get("gender") }} |
{{ stu_list }}
name | age | gender | |
---|---|---|---|
{{ student.name }} | {{ student["age"] }} | {% if student.get("gender") != "男" and student.get("gender") != "女" %} 未知 {% else %} {{ student.get("gender") }} {% endif %} |
id | name | age | gender |
---|---|---|---|
{{ skey }} | {{ stu_dict[skey].get("name") }} | {{ stu_dict.get(skey).get("age") }} | 1 |
id | name | age | gender |
---|---|---|---|
{{ skey }} | {{ svalue.get("name") }} | {{ svalue.get("age") }} | 1 |
jianjia2的特殊用法
from flask import Flask, render_template,Markup ? app = Flask(__name__) ? # app.config["DEBUG"] = True app.debug = True ? @app.route("/") def home(): return render_template("stu.html",stu=STUDENT,stu_list=STUDENT_LIST,stu_dict=STUDENT_DICT) ? ? @app.template_global() def ab(a,b): return a+b ? @app.template_global() def my_input(na,ty): s = f"" return Markup(s) ? @app.route("/a") def home2(): inp = Markup("") return render_template("a.html",btn=inp) ? if __name__ == "__main__": app.run("0.0.0.0",9527) {{ ab(2,7) }} ? ? {% macro my_input(na,ty) %} "{{ ty }}" name="{{ na }}"> {% endmacro %} ? {{ my_input("username","text") }} ? {{ btn }}
4.2 werkzeug
-
Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等
代码示例:
from werkzeug.wrappers import Request, Response ? @Request.application def hello(request): return Response('Hello World!') ? if __name__ == '__main__': from werkzeug.serving import run_simple run_simple('localhost', 4000, hello)