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

50 篇文章 23 订阅

1.说在前面的话

pythonweb开发框架

2.Flask开发环境搭建

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

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

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

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

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

注意修改完后不能再通过localhost:80/static/hehe.jpg访问到了,看了源码我们知道他会截取static_folder的值的/后面的单词作为他内部注册路由的地址,所以要通过localhost:80/statics/hehe.jpg访问

当然我们也可以指定他的地址不是statics,那么我们需要传入一个static_url_path的值就修改成功了。这里不在演示



路由三种转换器:

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中了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值