flask笔记(史上最全,不全不要钱系列)

1.说在前面的话

pythonweb开发框架css

2.Flask开发环境搭建

关于python新建flask项目自动生成的文件夹说明:

debug=True是调试模式,当咱们更改python代码,直接F5页面就能看到更改。html

html文件写在templates文件夹里面,这个templates文件夹是模板的默认目录。python

css文件放在static文件夹里面。当咱们放问一下静态资源的时候直接在url中输入localhost:80/static/hehe.jpg便可。这是由于flask对静态文件有默认值设置的。默认状况下,flask就认为你的静态文件夹就叫static,而且位于应用程序根目录下面的。web

应用程序根目录是根据你初始化app=Flask(__name__)的时候的代码决定了哪里是根目录。若是咱们要更改flask的默认设置只须要按照下图所示进行修改便可:算法

注意修改完后不能再经过localhost:80/static/hehe.jpg访问到了,看了源码咱们知道他会截取static_folder的值的/后面的单词做为他内部注册路由的地址,因此要经过localhost:80/statics/hehe.jpg访问数据库

固然咱们也能够指定他的地址不是statics,那么咱们须要传入一个static_url_path的值就修改为功了。这里不在演示flask



路由三种转换器:windows

url_for():

这个函数有不少的功能,这里咱们用它来输出视图函数的url。url_for后面打的就是视图函数的名称。里面的这个.就是跟python对应程序包的一个引用,意思就是当前python包的相对路径。数组

设置正则路由:

获取input标签的用户名和密码:

方式一:安全

下面指定的username和password是和上面的form中的name是一致的,使用request.form['username']

方式二:

若是要经过url来传送数据 , https://localhost:5000/login?username=jenrey

就要用下面这种方式获取参数值,使用request.args['username']

上传文件:

redirect 是重定向函数,输入一个URL后,自动跳转到另外一个URL所在的地址

注意上图windowsX用户写f.save()可能报错,须要按照下面进行修改(未测试)

应该在upload_path里面加secure_filename

写cookie:

处理错误:

返回400状态码,后面的不在处理了

可是上面这样写没有任何意义。因此咱们要按照下面这么写,有个专门处理错误的装饰器@app.errorhandler(400)

咱们不须要指定路由了, 只须要指定状态码,这样出现错误的时候,他就会本身响应到所对应的页面了。

flask扩展包:

方式一:

方式二:

产生依赖引用文档:

指令执行完毕会产生一个文档,他会把咱们用到的包列入到文档内

requirements这个文件名实际上是python约定俗成的用法,当时咱们使用这个文件名,pycharm会自动帮咱们识别咱们装了哪些包没装哪些包

安装依赖引用文档的包:

flask-script:

Flask经常使用的两个包

先安装模块

pip install flask_script
flask_script 做用:能够经过命令行的形式来操做Flask,例如经过命令跑一个开发版本的服务器、设置数据库、定时任务等


直接把flask对象app传入进去

总体代码以下

python manage.py runserver #启动服务

flask-script官网:

具体的@manager.command用法看下面

livereload:

先安装模块:

pip install livereload

@manager.command来,上面就传入了dev的参数

模板:

禁用网页转义功能:

或者

两个效果是同样的,只不过第二个是针对值来作这个东西。|safe在就jinjia2语法中呗成为过滤器filter,这个|safe是直接禁止转义,直接把它前面的变量输出到页面。

jinjia2过滤器:

上面网站404了。http://jinja.pocoo.org/docs/2.10/templates/#list-of-builtin-filters

自定义Markdown过滤器:

@app.template_filter()装饰器:

咱们只要在函数上声明这个装饰器,就能够把这个filter注册到模板

@app.context_processor上下文处理器

直接把方法注册到模板中。上下文处理器自己会返回一个字典的函数。

jinja语法:

set 赋值语句

for in循环语句及for的上下文变量loop

上面两个图拼一块儿才是完整的图

关于for的上下文变量loop,loop能够得到for的不少上下文信息,例如first,last,index等

上图是,在jiajn的if语句中有一种函数式表达方式叫作条件测试函数Tests,odd就是一个测试函数,将loop.index做为参数传入odd中测试一下是否是真的。http://jinja.pocoo.org/docs/2.10/templates/#list-of-builtin-tests

自定义测试函数:

@app.template_test

模板页:

语法

{% block 名称%}

{% endblock %}

上面就是模板页啦,直接运行它是没有任何效果的,是空的。

因此是没有任何意义的,那么咱们能够直接继承这个模板

写模板的时候没有顺序的,只要名称对上,他会按照他的父模板来排。block的名称是惟一的。

首先咱们要在咱们写的html文件中引入模板,下图红框,使用extends关键字

若是咱们的内容没放到块里面就会被忽略掉,因此如今看不到以前写的任何东西了。下面咱们把内容放在块中:

显示效果以下图:


关于重写的问题:

增长下面代码后,发现被覆盖掉了

因此咱们要这么解决,加一个supper(),这样的话在上在下都随咱们本身操做。

关于block块太多的时候,能够加强代码可读性:在endblock后面能够写个名字,这样就知道end的是哪个了。


须要注意的问题:

在block里面的变量是被封闭起来的,是不能引用block外的变量的。

若是要解决这样的问题须要在block后面加一个scoped

包含页:

当咱们某些块不断去扩充的时候,可能公用的东西会不少,可能会致使咱们整个的模板愈来愈臃肿。在这个时候咱们能够采用包含页的方式,

新建一个html文件以下:

而后使用{% include '文件路径' %}

也能够以下所示跟一个数组就是包含多个文件

页面中内容的重用--宏

宏就是相似于可重用函数,只不过不是在python里面,而是在html里面。

格式{% macro %}{% endmacro %}

上面仅仅是骨架,下面补充内容

使用方式就是下面所示,跟调用函数同样的方式

若是咱们定义的宏不少,就须要从新开个新的html页面,把他们都写到一块儿,而后import进来便可.

在新建页面中写入下图所示的代码:

导入进来(以下图):注意import的时候要写as起个别名,不然会报错的哦

下面是使用方式:一样要写别名.

消息闪现

导入flash

须要在配置文件中设置 SECRET_KEY 数值能够随意,其实就是秘钥,这样能保证数据的安全,由于咱们的session是在客户端的,因此设置完SECRET_KEY后就能够经过系统本身的算法来进行验证数据安全的问题了。 

这里看起来是个列表的形式,因此咱们能够屡次使用flash()

消息闪现的消息分类:

with和endwith是限制变量做用域的,errors只会在其之间有效果。原来咱们不加with,变量的做用域是在block中的,加了以后就变成with中了。