flask框架2_flask框架介绍

flask框架2_flask框架介绍flask框架2文章目录flask框架2一.状态保持1.Session细节二.高级处理1.上下文2.请求勾子3.路由变量3.1绑定动态URL(重点)3.2正则转换器4.werkzerg库结构(了解)三.参数和配置1.Flask()参数2.Flask应用配置四.脚本启动五.模板1.模板变量的基本使用(重点)2.过滤器一.状态保持1.Session细节…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

flask框架2

一. 状态保持

1. Session细节

  • 细节
    • 生成随机字符串 base64.b64encode(os.urandom(48)) 生成随机字符串
    • 设置过期时间
  # 让session支持设置过期时间 过期时间默认为31天
  session.permanent = True
  # 设置session的过期时间
  app.permanent_session_lifetime = timedelta(days=7)
  • session删除数据
# session删除数据
# session.pop("username", None)
  • flask中默认的session并不是传统的session机制(数据保存在服务器数据库中), 而是将数据加密后全部保存到了cookie中

二. 高级处理

1. 上下文

# 上下文变量: 并不是全局变量, 是有使用范围的, 范围为从某次请求开始, 到该请求结束
# 请求上下文: 记录一些和请求有关的数据 request session
# 应用上下文: 记录一些事和应用有关的数据 current_app g

# current_app: 会自动引用创建的flask应用, 当需要在其他文件中使用flask应用时, 应用通过current_app来获取
# g: flask给开发者预留一个容器, 可以存放一些自定义的数据 每次请求时, g变量的数据会被重置

# 上下文机制: 实现了线程隔离(全局变量线程共享), 每个上下文对应一个线程, 当请求开始时, 会对应线程创建一个上下文, 当请求结束时, 销毁该上下文(上下文记录的数据随之销毁)


from flask import Flask, request, g

import news

app = Flask(__name__)


@app.route('/')
def index():
    print(request.url)
    g.name = "zs"

    news.func1()
    return "index"


@app.route('/demo1')
def demo1():
    # print(g.name) # 会报错
    return "demo1"
  • 上下文底层实现 https://segmentfault.com/a/1190000009152655

2. 请求勾子

  • 请求钩子: 对各类请求事件进行监听, 当事件发生时, 可以让开发者进行一些自定义处理
from flask import Flask

app = Flask(__name__)


@app.route('/')
def index():

    return "index"


@app.before_first_request
def initial():
    print('web应用被第一次请求时会调用, 一般用于完成一些初始化处理, 如 建立数据库连接')


@app.before_request
def prepare():
    print("每次请求前(视图函数调用前)调用, 一般用于完成一些请求的准备工作, 如参数校验, 数据统计, 黑名单过滤")


@app.after_request
def process(response):  # 一旦设置了该钩子, 必须设置形参来接收响应对象
    print("每次请求后(视图函数执行完)调用, 一般用于对响应进行加工, 如设置统一的响应头, 包装数据")
    return response  # 对响应加工完, 还需要返回响应对象


@app.teardown_request
def error_handle(error):  # 一旦设置了该钩子, 必须设置形参来接收异常信息 无异常就是None
    print("每次请求后调用, 无论是否出现异常, 一般用于请求资源回收, 如异常统计")

3. 路由变量

3.1 绑定动态URL (重点)
  • 路由变量: 让视图函数可以绑定动态URL
  • 路由变量格式: /user/<user_id>
from flask import Flask, url_for

app = Flask(__name__)


@app.route('/user/<user_id>')
def user(user_id):  # 一旦设置了路由变量, 视图函数就必须设置和路由变量同名的形参, 形参会接收路由变量的值

    print(user_id)

    return "user"


@app.route('/')
def index():
    # 获取视图函数的动态URL, 必须手动设置动态部分的内容
    url1 = url_for("user", user_id=12)
    print(url1)

    return "index"
3.2 正则转换器
  • 正则转换器: 给路由变量进行格式过滤, 格式不满足返回404
from flask import Flask, url_for

app = Flask(__name__)

# 所有转换器都继承了BaseConverter
@app.route('/user/<int:user_id>')
def user(user_id):  # 一旦设置了路由变量, 视图函数就必须设置和路由变量同名的形参, 形参会接收路由变量的值

    print(user_id)
    print(type(user_id))
    return "user"


# 部分转换器可以传递参数, 以便设置更灵活格式要求
@app.route('/news/<string(minlength=2, maxlength=5):news_name>')
def news(news_name):

    print(news_name)
    return "news"

4. werkzerg库结构 (了解)

在这里插入图片描述
在这里插入图片描述

三. 参数和配置

1. Flask( )参数

app = Flask(__name__,  # 导入名称, flask会根据该名称查询静态文件/模板文件存储路径
            # flask官方推荐使用__name__, 如果使用__name__, 从当前文件所有的文件夹中查询静态文件/模板文件路径
            static_folder="static",   # 设置静态文件的存储路径
            static_url_path="/res/image",  # 设置静态文件的访问路径
            template_folder="templates"  # 设置模板文件的存储路径
            )

2. Flask应用配置

from flask import Flask

app = Flask(__name__)
# 设置应用配置 本质是字典
# app.config['DEBUG'] = True


# 开发中, 会对配置进行封装 提供了三种方式

class Config:
    # 定义和配置同名的类属性
    DEBUG = True


# 从对象中加载配置 要求掌握
app.config.from_object(Config)

# 从py文件中加载配置
# app.config.from_pyfile("config.py")

# 从环境变量中加载配置
# app.config.from_envvar("ENV_CONFIG")


@app.route('/')
def index():

    return "index"


if __name__ == '__main__':
    app.run()

四. 脚本启动

  • 作用: 让开发者可以以 文本模式 来启动和配置web应用

  • 需要安装flask组件 flask-script
    在这里插入图片描述

  • 项目部署到服务器以后, 只能通过终端用文本模式来启动web应用
    在这里插入图片描述

  • 启动web应用 python main.py runserver -h 0.0.0.0 -p 8000 -d

  • 使用pycharm启动mgr管理的项目
    在这里插入图片描述

五. 模板

1. 模板变量的基本使用 (重点)

  • 模板的基本使用
    在这里插入图片描述

  • 模板变量

<body>

<label>{
  
  { name }}</label><br/>
<label>{
  
  { age_dict["zs"] }}</label><br/>
<label>{
  
  { age_dict.zs }}</label><br/>  {# 模板变量支持点语法 #}
<label>{
  
  { height_list[0] }}</label><br/>
<label>{
  
  { height_list.0 }}</label><br/>
<label>{
  
  { height_list.0 + age_dict.zs }}</label><br/>  {# 支持数学运算 #}
<label>{
  
  { user.type }}</label><br/>  {# 支持自定义对象 #}
<label>{
  
  { user.is_login() }}</label><br/>  {# 支持函数和方法调用 #}
</body>

2. 过滤器

  • 作用: 对模板变量进行格式转换
<label>{
  
  { name | upper }}</label><br/>
<label>{
  
  { name | upper | reverse }}</label><br/>  {# 支持链式调用 #}
<label>{
  
  { height_list | sum }}</label><br/>
<label>{
  
  { age_list | sum(attribute="age") }}</label><br/>  {# 字典列表中的每个键值对求和 #}

<label>{
  
  { h1_tag | safe }}</label><br/>   {# jiaja2模板会自动对html字符进行转义, 可以设置safe过滤器来取消html转义 #}


<p>
    {% filter upper %}  {# 过滤代码块 可以将其中的内容全部转换 #}
        hello<br/>
        world
    {% endfilter %}
</p>
  • 自定义过滤器
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179055.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • spring 整合 mybatis原理

    spring 整合 mybatis原理SqlSessionFactoryBean的创建1.SqlSessionFactoryBean这个类实现了三个接口,一个是InitializingBean,另一个是FactoryBean,还有就是ApplicationListener接口。下面说明一下实现了这三个接口的,有什么作用InitializingBean接口:实现了这个接口,那么当bean初始化的时候,spring就会调用该接口的实现…

  • 代码也浪漫——Python烟花秀[通俗易懂]

    代码也浪漫——Python烟花秀[通俗易懂]下午太困,无意中看到一段用Tkinter库写的放烟花的程序,就跟着跑了一遍。设计理念:通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果。粒子会发生“膨胀”,意思是它们会以恒速移动且相互之间的角度相等。这样就能让我们以一个向外膨胀的圆圈形式模拟出烟花绽放的画面。经过一定时间后,粒子会进入“自由落体”阶段,也就是由于重力因素它们开始坠落到地面,仿若绽放后熄灭的烟花。 首先我们写一个粒子…

  • vfs_fsync[通俗易懂]

    vfs_fsync[通俗易懂]在Linux系统中,对文件系统上文件的读写一般是通过页缓存(pagecache)进行的(DirectIO除外),这样设计的可以延时磁盘IO的操作,从而可以减少磁盘读写的次数,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,虽然内核中设计有一个工作队列执行赃页回写同磁盘文件进行同步,但是在一些极端的情况下还是免不了掉电数据丢失。因此内核提供了sync、fsync、fdatasync和msync系统调用用于同步,其中sync会同步整个系统下的所有文件系统以及块设备,而fsync和fdatasync只针

  • 全栈JavaScript之路(十八)HTML5 自己定义数据属性「建议收藏」

    全栈JavaScript之路(十八)HTML5 自己定义数据属性

  • CreateFile()打开串口失败,返回句柄值为0xffffffff

    CreateFile()打开串口失败,返回句柄值为0xffffffff出错情况:设备1和设备2分别使用COM1和COM2外界通信,在不关闭软件的情况下,调换串口(即设备1/2,分别使用COM2/1),此时出错?以下是查找原因的步骤:_hCommHandle=::CreateFile( _szCommStr, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLA

  • java socket 中文乱码_java-Socket接受中文乱码的解决 | 学步园

    java socket 中文乱码_java-Socket接受中文乱码的解决 | 学步园服务器发送一条数据如:Java代码BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));PrintWriterout=newPrintWriter(client.getOutputStream());out.println(“没有查到该数据。”);//向客户端发送out….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号