Flask框架之视图功能分享

主要分享介绍:

路由、request对象、response对象、状态保持

路由:

概述:请求地址会被底层Werkzeug库处理(去除ip和端口),用于进行路由匹配,匹配成功后将找打的视图函数进行调用,处理本次用户的请求

格式:

@工程对象.route("url地址")

@蓝图对象.route("url地址")

url_map属性

功能:查看当前所有的路由配置

使用:print(app.url_map)

提取路由中的部分

通过<>从url地址中取值,传递给视图函数使用

@myApp.route("/info/<sid>/")
def info(sid):
    #默认参数值类型为字符串类型
    return "sid:{}".fomate(sid)

简单约束

类型约束:

@myApp.route("/info2/<int:sid>/")
def info2(sid):
    return "info2:sunck is a good man! he is %d years old"%(sid)
@myApp.route("/info2/<string:sid>/")
def info3(sid):
    return "info3:sunck is a good man! he is %s years old"%(sid)

路径约束:

@myApp.route("/info4/<path:sid>/")
def info4(sid):
    return "info4:%s"%(sid)

正则约束

作用:使用正则表达式对路由进行更具体的约束

正则转换类(app.py文件中增加)

from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
    def __init__(self, url, *args):
        super().__init__(url)
        self.regex = args[0]

在app中注册

app.url_map.converters["regex"] = RegexConverter

使用:

@myApp.route("/info5/<regex('\d{2}'):sid>/")
def info5(sid):
    #正则约束是约束的值的样子,不会约束类型
    return "info5:sunck is a good man! he is %d years old"%(int(sid))

http方法

概述:默认视图可以被GET访问,flask中可以规定以什么样的方式请求视图,如果使用不正确的请求方式会返回405错误

示例:

@myApp.route("/login/", methods=["POST"])
def login():
    return "登陆成功"
@myApp.route("/login/", methods=["POST", "GET"])
def login():
    return "登陆成功"

常用的http请求方式:“GET”、“POST”、“PUT”、“PATCH”、“DELETE”

request对象(请求对象)

作用:获取请求报文中传递的数据

简介:浏览器发送到服务器的所有报文被flask接收后,创建request对象,request对象会被用在视图函数中,获取请求的数据

使用方法:导入

from flask import request

属性:

url:完整的请求URl

url_charset:编码格式

url_root:去掉“?”后面的参数

url_rule:正则匹配网址

base_url:去掉GET参数的url

host_url:只有主机ip和端口的url

path:装饰器中写的路由地址

full_path:去掉了ip和端口剩下的完整的url

remote_addr:请求客户端的ip地址

remote_user:请求客户端的用户名

method:请求的方式

args:获取GET方式请求的数据

view_args:提取url中的部分值传递给视图的参数

form:获取POST方式请求的数据

files:用于上传文件

headers:存储所有请求头信息

cookies:存储所有请求的cookie

ImmutableMultiDict类型对象

概述:request对象中的args、form、files属性都是该类型的对象

​ 是类似字典的对象,与python中的字典的区别在于该类型的对象用来处理一个键拥有多个值的情况

方法:

get()

​ 功能:根据键获取值

​ 注意:只能获取键的一个值(如果一个键有多个值,获取第一个值)

getlist()

​ 功能:将键的值以列表的形式返回

reponse对象(响应对象)

作用:返回给客户端的信息

概述:request对象是有服务创建的,response对象需要程序员手动创建

使用

导入:from flask import make_response

原形:

​ def make_response(*args):

​ def make_response(info, status, headers):

参数:

​ info:必选参数

​ status:可选参数

​ headers:可选参数

示例:

@myApp.route("/res/")
def res():
    response = make_response("hello word", 200, {"Content-Type": "text/plain; charset=utf-8"})
    return response

或直接返回字符串

@myApp.route("/res2/")
def res2():
    response = make_response("hello word")
    return response

或返回页面

@myApp.route("/res3/")
def res3():
    response = render_template("index.html")
    return response

设置状态码

@myApp.route("/res4/")
def res4():
    response = make_response("hello word", 400)
    return response

注意:状态码一般无需手动创建,最好不要自创状态码

重定向

导入:from flask import redirect

示例:

@myApp.route("/test1")
def test1():
    return redirect("/test2")
@myApp.route("/test2")
def test2():
    return "hello word"

终止执行

概述:如果是视图函数执行过程中出现了错误,可以通过abort函数立即终止视图函数的执行

通过abort函数可以向客户端返回一个http标准状态码,表示出错的信息 如果触发了abort函数,那么其后面的代码不会被执行

导入:from flask import abort

示例:

@myApp.route("/test/<int:num>")
def test(num):
    if num == 0:
        #终止执行
        abort(400)

    ret = 1 / num
    return "hello word"

捕获中断

@myApp.errorhandler(400)
def error400(e):
    print(e)
    return "捕获成功"
@myApp.errorhandler(404)
def error404(e):
    print(e)
    return "notfind"

状态保持

概述:指登录保持或身份验证,在这里只介绍常用的cookie和session,可自行学习flask_login模块用于状态保持

导入:from flask import session

设置存储位置:

本地缓存

配置文件中设置

# session是否长期有效,如果为False则关闭浏览器session失效
SESSION_PERMANENT = True
# session长期有效,则设定session的生命周期,单位是秒,默认大致3小时
PERMANENT_SESSION_LIFETIME = 60 * 60 * 24 * 14
# 是否强制加盐(密)混淆session(是否对发送到浏览器上的session的cookie值进行加密)
SESSION_USE_SIGNER = True
# 如果加盐,必须设置安全码
SECRET_KEY = str(uuid.uuid4())
# session存储模式
SESSION_TYPE = "null"

redis缓存

需安装flask-session模块

创建三方对象

from flask_session import Session
sess = Session()

app加载三方对象

sess.init_app(app)

配置文件中设置

# redis
SESSION_PERMANENT = True
PERMANENT_SESSION_LIFETIME = 60 * 60 * 24 * 14
SESSION_USE_SIGNER = True
SECRET_KEY = str(uuid.uuid4())
SESSION_TYPE = "redis"
# 存储到redis中键的前缀
SESSION_KEY_PREFIX = "session:"
#redis服务器配置,默认使用0库
SESSION_REDIS = Redis(
    host="www.sunck.wang",
    port="6379",
    password="sunck2000"
)

还可用sqlalchemy、memcached、filesystem、mongodb等数据库缓存

写session

session[key] = value

读session

value = session.get(key, default=None)

删session

session.pop(key,None)

素材来源sunck

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值