目录
前言
正文
初始Flask
拓展一
Flask与HTTP
Flask模板
基本用法
辅助工具之上下文
辅助工具之全局对象
写在最后
参考资料
21年9月,因为项目需求方催付上线,需要会python的人,所以我又临时顶上了。
其实项目本身更多的还是需求逻辑和算法逻辑,只是flask框架于我是个全新的知识,所以趁机就全面学习一下!
可能会因为个人理解和编写有所错误,欢迎各位勘正!
老规矩:在此做一些学习和错误记录,仅作个人小结用(不涉及任何项目细节,应该也涉及不到)
使用pycharm(相关安装配置可查看以前的博文)新建flask项目
直接跑一下示例
前台页面显示
解释一下项目的整体结构,从上图可以看到,新建的最基本的项目会包含static和tamplate两个文件夹和一个与包同名的py文件
我们知道在MVC框架中包含三个部分:Model、View、Controller
严格地说,Flask不是MVC架构的框架,因为他没有内置数据模型的支持。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
简单解释一下这个示例代码:
app.debug = True
app.run()
app.run(debug=True)
这里我想顺带提一下python里面__(双下划线)和_(单下划线)的区别。
_单下划线本身可以用作临时变量,比如:for _ in rang(n);
_xx(变量前的单下划线),用于声明私有化属性和方法,但实际上python本身没有真正的私有方法,所以这只是一个申明。form 包名 import * 禁止导入,类对象和子类可以访问,使用对象._变量名调用;
__xx(变量前的双下划线),避免与子类中的属性命名冲突,同时双下划线开头的方法不能被重写,只允许类内部使用,无法在外部直接访问,应使用对象._类名__变量名调用;
__xx__(变量前后的双下划线),用于定义类的魔法属性/方法,例如:__init__()当变量被创建初始化调用,__new__()用来创建实例、__str__等,无法直接调用;
本部分根据书中的讲解,先行跳过,等完成所有Flask的基础学习以后再回过头补充。
模板:包含固定内容和动态部分的可重用文件。
模板引擎的作用:读取并执行模板中的特殊语法标记,并根据传入的数据将变量替换为实际值,输出到最终的HTML页面。这个过程也被称为渲染。
Flask默认的模板引擎是Jinja2(支持"."获取变量的属性),常见的三种定界符:
这里给出一个简单的示例watchlist.html。其中user是自建的虚拟数据
user={
'username':'Grey Li',
'bio':'A boy who loves movies and music',
}
{{ user.username }}'s Watchlist
{{ user.username }}
{% if user.bio %}
{{ user.bio }}
{% else %}
This user has not provided a bio.
{% endif %}
{# 下面是电影清单 #}
在视图中渲染模板时,使用render_template()函数,传入模板的文件名作为参数,还可以将关键字参数的形式传入模板中实用的变量值。
当然Jinja2还可以传入字符串、列表、字典;函数、类、类实例
Flask会默认在根目录下的template文件夹下寻找模板文件
教程里面提到:如果应用是一个模板,这个文件夹应该和模板同级;如果是一个包,那么这个文件夹作为包的子目录。
对之前的初始代码进行修改丰富
from flask import Flask, render_template
app = Flask(__name__)
user = {
'username':'Grey Li',
'bio':'A boy who loves movies and music',
}
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/watchlist/')
def watchlist():
return render_template("watchlist.html", user=user)
if __name__ == '__main__':
app.run()
运行以后,前台显示如下
这部分书上讲的不太清楚。
Jinja2提供的内置全局变量
Flask内置的全局变量
← Return
{#在watchlist.html模板文件中,上面那句话可以等价于下面这句话 #}
← Return
自定义的全局函数
时常会迷茫会反思会制定计划然后三天打鱼两天晒网陷入循环。
部门内计算机科班的人很少,这大概也是我总被调配救急的原因。但显然国企不是一个重视技术的地方。
刚毕业的两年总还是有很多学习的地方,所以不要操之过急,脚踏实地一些。
Flask --- 框架快速入门,这篇博文里提到的一些学习资源很好,附在下面
Flask 用户指南:欢迎使用 Flask — Flask 0.10.1 文档
w3cschool.cn 的 Flask 教程:Flask 教程_w3cschool