Flask

作者: 风雨声豪入梦中 | 来源:发表于2019-05-29 15:57 被阅读0次
Django框架属于重量级框架
Flask和Tornado框架就属于轻量级框架

首先安装虚拟环境,命令如下:

sudo pip3 install virtualenv
接下来还要安装虚拟环境扩展包,命令如下:
sudo pip3 install virtualenvwrapper
安装虚拟环境包装器的目的是使用更加简单的命令来管理虚拟环境。
修改用户家目录下的配置文件.bashrc,添加如下内容:
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
然后执行source .bashrc让配置生效。

创建一个名字为 flask_1.0的环境:
mkvirtualenv flask_1.0
安装Flask
pip install flask
Flask参数配置方式有很多种,每一种都可以达到结果,在合适的场景选择合适的配置方式。
在文件加中新建一个config.cfg配置文件,在配置文件上写上下面语句,表示开启调试模式。
直接操作配置
直接操作适用于配置参数较少的场景,config本质其实就一个字典。
路由,其实就是我们在浏览器输入地址后,后台进行匹配,如果匹配上,则执行此视图函数并返回内容。我们经过前面的例子也看出来Flask是用一个叫route()的装饰器进行装饰到视图函数上,匹配的内容是去掉域名和端口后面地址.
重定向是网站比较常用的地址跳转,比如我们在网站登录后,需要重新跳转到首页,这个功能我们就可以用到重定向。
redirect函数用于重定向。
url_for参数是视图函数函数的名字,它会根据视图函数的名字找到装饰次视图的路由。

请求方式

GET     获取资源
POST    新增资源
PUSH    更新资源
DELETE  删除资源
OPTIONS     询问支持的方法

在Flask中支持下面这些转换器:

转换器     含义
default     接受字符串,默认转换器
stirng  接受字符串,跟默认一样
int     接受整数
float   同 int ,但是接受浮点数
uuid    唯一识别码
path    和默认的相似,但也接受斜线

自定义转换器

有时候系统提供的转换器并不能满足我们,比如我们需要的UID是至少5最多10位。如果不是这个范围呢,我们就可以认为不满足我们的匹配规则。而现在我们不管输入多少位,后台都会匹配上,然后就去执行我们的视图。如果要排除这种现象,我们就需要自定义转换器。

需要用到Flask这个转换器基类BaseConverter

to_python 只要使了转换器,一直会被调用
to_url 只有在重定向了,并且路由上有参数的时候才会被调用
当我们重定向了,并传递参数的时候,参数会先到to_url,返回的值会去匹配路由上的正则。
如果匹配上了,就把匹配到参数传到 to_python ,这个方法返回的值才会到视图函数中。

变量

现在模板的内容是写死的,这肯定满足不了咱们,我们希望把后台返回的内容渲染在到模板上。Flass使用 Jinja2这个模板引擎来渲染模板。
我们先把pycharm里的模板语言改成Jinja2

在模板中用模板语言解析出我们的数据,解析变量我们{{}},这种语法我们叫变量代码块

模版中的变量代码块可以是任意 Python 类型或者对象,只要它能够被 Python 的 str() 方法转换为一个字符串就可以。

标签

用 {%%} 定义的控制语句的代码块,可以实现一些语言层次的功能,比如循环或者if语句。比如我们要上面的所有的爱好变量出来,模板中可以增加

注释

使用 {# #} 进行注释,注释的内容不会在html中被渲染出来。
{# {{ name }} #}

过滤器

过滤器顾名思义就是一边进入原始数据,一边出你想要的数据。其本质就是一个函数,比如我们取列表的长度、格式化时间等操作,写法跟linux里面的管道一样。
我们在模板中加入一些过滤器试试:


长度过滤器:
{{ name|length }}<br>

默认过滤器,当后台没有返回sex的时候会执行:
{{ sex|default('男') }}<br>

反转过滤器:
{{ name|reverse }}<br>
过滤器支撑链式调用:

{{ "hello world" | reverse | upper }}

语句块操作:

{% filter upper %}
    'abc'
{% endfilter %}

常用过滤器:
禁用转义:{{ '<em>hello</em>' | safe }}
删除标签:{{ '<em>hello</em>' | striptags }}
首字母大写:{{ 'hello' | capitalize }}
所有值小写:{{ 'HELLO' | lower }}
首字母大写:{{ 'hello world' | title }}
字符串反转:{{ 'hello' | reverse }}
字符串截断:{{ 'hello world' | truncate(5) }}
获取列表长度:{{ [1,2,3,4,5,6] | length }}
列表求和:{{ [1,2,3,4,5,6] | sum }}
列表排序:{{ [6,2,3,1,5,4] | sort }}

自定义过滤器

虽然系统给我提供了很多过滤器,但是需求这种东西是永远满足不了,所以这个时候就需要我们自定义过滤器。上面也说了过滤器的本质其实就一个函数

request

我们都知道当浏览器去访问一个地址时,Http协议会像后台传递一个request对象。这个request对象包含了请求头、请求参数、以及请求方式,当然后台可以取到request。然后进行逻辑处理。

GET请求

我们写一个接受个人信息的接口,也就是视图函数。我们新建一个名为register.html的模板,在模板里写如下表单:

    action:表示要提交到的地址
    method:请求方式

POST请求

登录和注册都会使用Post请求,谁也不希望自己的一些敏感信息在浏览器的地址上显示。那我们把刚才的列子刚改Post请求,齐前端只需要把表单里面的method改下就行
后台需要改的地方有两个地方:

    请求方法:默认是get请求
    参数提前:把args改成form

上传文件

上传文件也是我们经常用到的功能,前端上传一张文件,然后后端处理保存到服务器上。
文件这种类型属于多媒体类型资源。前端form表单里面需要加enctype="multipart/form-data"。我们新建一个名upload.html模板

response

视图在接收HttpRequest并处理后,必须返回HttpResponse对象。目前视图函数只是返回字符串,之后 Flask 将字符串转换为响应对象。如果你要显式地转换,你可以使用make_response()函数然后再进行修改

Cookie

我们都知道HTTP协议是无状态的请求协议,用户这次访问和下一次访问都是新的请求,它们之间是没任何关系的。但是我们需要知道上一次访问用户做了什么操作,就需要用到cookie。cookie是网站以键值对格式存储在浏览器中的一段纯文本信息,用于实现用户跟踪。cookie是基于域安全的

过期时间

cookie是有过期时间的,当我们设置cookie的时候可以直接给cookie设置过期时间,有如下几种设置方法:

    max_age是一个整数,表示在指定秒数后过期。
    expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期。
    max_age与expires二选一。
    如果不指定过期时间,在关闭浏览器时cookie会过期。

session

除了cookie外还有一个叫session的机制。session也是可以存储一些信息的。对于一些敏感、重要的信息,我们可以存储到session中。谁也不希望自己的余额、银行卡密码存到cookie当中。
cookie和session结合使用:web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:

存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。

过期时间

如果没有设置session的有效期。那么默认就是浏览器关闭后过期。
如果设置session.permanent=True,那么就会默认在31天后过期。
如果不想在31天后过期,那么可以设置app.config[‘PERMANENT_SESSION_LIFETIME’] = timedelta(hour=2)在两个小时后过期。

删除session

删除session中的值:也是类似字典。可以有三种方式删除session中的值。
session.pop(key)
del session[key]
session.clear()

把session存在服务端

我们可以利用flask-session来把session存在服务器,毕竟session的数据比较重要,存在浏览器中不安全。

flask-session支持把session存在各种数据库中

    redis
    memcached
    filesystem
    mongodb
    sqlalchmey

我们最好把session存在内存级的redis数据库中,读写速度比较快。

异常

我们在写视图函数时,会对前端传递过来的参数进行校验,如果校验不过,会给前端返回一些特定的异常信息。在Flask中,abort() 函数可以立即终止视图函数的执行,并且把相对应的错误信息返回给前端
注意abort里面的状态码必须就是HTTP状态码,不能自己随便写。常见状态码如下:

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

    1xx:指示信息–表示请求已接收,继续处理
    2xx:成功–表示请求已被成功接收、理解、接受
    3xx:重定向–要完成请求必须进行更进一步的操作
    4xx:客户端错误–请求有语法错误或请求无法实现
    5xx:服务器端错误–服务器未能实现合法的请求
    常见状态码:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常





相关文章

网友评论

      本文标题:Flask

      本文链接:https://www.haomeiwen.com/subject/rweytctx.html