基于flask的闪现、g对象、蓝图

news2024/11/20 9:42:56

【 一 】闪现(flash)

# 1 flask中得闪现存放数据的地方,一旦取了,数据就没了
	-实现跨请求间传递数据
# 2 django中有没有类似的东西?
	message 消息框架
    
    
# 3 基本使用
	1 设置:flash('欢迎你、欢迎来到澳门赌场!!!')
    2 取:get_flashed_messages()
    
# 4 根据标签设置和取值
	flash('超时错误',category="x1")
	get_flashed_messages(category_filter=['x1'])
  • app.py

from flask import Flask
# 定义HTTP的方法 put、get、post等
from flask.views import MethodView
# Flask(启动Web应用)、render_template(响应HTML模板)、redirect(重定向)、flash(接收消息)、get_flashed_messages
from flask import Flask, request, render_template, redirect, flash, get_flashed_messages
# 启动Web应用
app = Flask(__name__)

app.debug = True
# 要用闪现,必须指定secret_key--》闪现内部使用session实现的
app.secret_key = 'asdfasdf'


# 用endpoint进行反向解析的
@app.route('/login', endpoint='login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'jing' and password == '123':
            # 使用闪现,放个数据
            flash('欢迎你:132456')
            flash('ss')
            flash('ee')
            return redirect('/')
        else:
            flash('用户名密码错误')
            return redirect('/')


@app.route('/')
def index():
    # 从闪现中取出数据
    # print(get_flashed_messages())
    return render_template('index.html')


if __name__ == '__main__':
    app.run()
  • index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css">
    <title>登录</title>
</head>
<body>
<div class="container col-xl-10 col-xxl-8 px-4 py-5">
    <div class="row align-items-center g-lg-5 py-5">
        <div class="col-lg-7 text-center text-lg-start">
            <h1 class="display-4 fw-bold lh-1 mb-3">亚洲最大交友平台</h1>
            <p class="col-lg-10 fs-4">Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark
                Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。目前,Bootstrap最新版本为5.0</p>
        </div>
        <div class="col-md-10 mx-auto col-lg-5">
            <form class="p-4 p-md-5 border rounded-3 bg-light" method="post">
                <div class="form-floating mb-3">
                    <input type="text" class="form-control" id="floatingInput" placeholder="name@example.com" name="username">
                    <label for="floatingInput">用户名</label>
                </div>
                <div class="form-floating mb-3">
                    <input type="password" class="form-control" id="floatingPassword" placeholder="Password" name="password">
                    <label for="floatingPassword">密码</label>
                </div>
                <div class="checkbox mb-3">
                    <label>
                        <input type="checkbox" value="remember-me"> 记住密码
                    </label>
                </div>
                <button class="w-100 btn btn-lg btn-primary" type="submit">登录</button>
                <hr class="my-4">
                <small class="text-muted">{{error}}</small>
            </form>
        </div>
    </div>
</div>
</body>
</html>
  • index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{get_flashed_messages()[0]}}</h1>
</body>
</html>
  • 这些信息要等登陆成功之后才会出现

image-20240613214645914

django中使用

################ 1 基础配置############
INSTALLED_APPS = [
    ...
    'django.contrib.messages',
    ...
]
# 在django setting.py 取消注释的message app
MIDDLEWARE = [
    ...
    'django.contrib.messages.middleware.MessageMiddleware',
    ...
]
# 在django setting.py 取消注释的message 的中间件
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'django.contrib.messages.context_processors.messages',
            ],
        }
    }
]
################ 2 设置存放位置############
MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage"


################ 3 放入值############
#添加message
from django.contrib import messages
def concel_order(request):
    messages.add_message(request, messages.SUCCESS, "删除成功1")
    messages.add_message(request, messages.SUCCESS, "删除成功2")
    
    return redirect("/order/control/")

################ 4 视图函数中取############
# 在视图函数中添加messages模块
# 再通过messages.add_message导入提示信息
# 在视图函数中import get_messages模块获取添加的提示信息
def control_order(request):
    if request.method == "GET":
        from django.contrib.messages.api import get_messages
        m1 = get_messages(request)
        print(m1)
        
################ 5 模板中取############
# 在html模板中添加for循环拿到message
<div>
    {% for obj in messages %}
        <ul>{{ obj.message }}</ul>
    {% endfor %}
</div>

【 二 】g对象

  • g对象就是一个全局对象
# 1 g 对象,是一个全局对象--》global的缩写,global是关键字,不能用来做变量,所以它叫了g
# 2 g在当次请求中,可以放入值,可以取出值
	-我们使用:index 视图函数---》内部又调用了add--》add()又调用了aa()-->如果有参数,需要依次传入
    -通过g对象,我们可以把参数放到g中,以后直接从g中取即可
    
# 3 g和request对象都在当次请求中有效
	-我们一般不直接把数据放到request对象中
    -因为可能会污染数据
# 4 django中没有g

具体示例

from flask import Flask, g, request

app = Flask(__name__)

app.debug = True
app.secret_key = 'asydiasdugiausdg'


@app.before_request
def before():
    # request.full_path 这里代表是一个完整的路径
    if 'index' in request.full_path:
        g.name = '你谈是'
        request.name= g.name
    else:
        g.name = '其他'
        request.name = '其他'
def add():
    print(g.name)
    print(request.name)
    b = g.name + "nb"
    return b


@app.route('/index')
def index():
    print(g.name)
    res = add()
    return 'hello'  + res


@app.route('/home')
def home():
    print(g.name)
    return 'home'


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

image-20240613220724881

image-20240613220747437

image-20240613220758047

g和session区别

# g 只在当前请求中有效
# session可以跨 请求
# 闪现可以跨请求--》本质就是session--》用一次就没了

【 三 】蓝图

  • 目录结构

-flask_lantu
	-views
	  -models.py
    -__init__.py
    -lan.py

models.py

from flask import Flask,Blueprint


# 创建一个名为 'user' 的蓝图
order_blue = Blueprint('user', __name__)

# 1 实例化得到对象
app = Flask(__name__)


@order_blue.before_request
def before():
    print('来了')


@order_blue.route('/order')
def order():
    return 'order-order-order'

# 2 注册路由--》写视图函数
@order_blue.route('/')
def index():
    # 3 返回给前端字符串
    return 'hello world'


if __name__ == '__main__':
    # 运行app,默认运行在5000
    app.run()

__init__.py

  • 就是进行注册

from flask import Flask

app = Flask(__name__, template_folder='../templates')



from .views.models import order_blue


app.register_blueprint(order_blue)

lan.py

from flask import Flask, Blueprint

app = Flask(__name__, template_folder='../templates')

from views.models import order_blue

app.register_blueprint(order_blue)

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

flask-session

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1881774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LCD 显示--lvds

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

本地Navicat/客户端连接阿里云RDSMySQL时遇到过的问题及解决

1.之前开发的RDS MySQL版本和本地MySQL版本最好接近&#xff0c;比如8.0.28和8.0.20好像都是可以兼容的&#xff0c;他们里面都有那个utf8的字符编码&#xff0c;但是后面我选的RDS MySQL版本有点新&#xff0c;是8.0.30甚至更新的版本&#xff0c;之前用C#语言写的连接MySQL以…

Avalonia 常用控件三 Window窗体相关二

1、效果演示 2、在Views中创建WindowDemo.axaml如下图 WindowDemo.axaml代码如下 <Window xmlns"https://github.com/avaloniaui"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/…

【C++题解】1228. 排队打水问题

问题&#xff1a;1228. 排队打水问题 类型&#xff1a;贪心 题目描述&#xff1a; 有 n 个人排队到r 个水龙头去打水&#xff0c;他们装满水桶的时间 t1​,t2​,…,tn​ 为整数且各不相等&#xff0c;应如何安排他们的打水顺序才能使他们花费的总时间最少&#xff1f; 每个人…

嵌入式UI开发-lvgl+wsl2+vscode系列:8、控件(Widgets)(一)

一、前言 这里将介绍一系列控件&#xff0c;了解后就可以开始基础的开发了。 二、示例 1、Base Obj&#xff08;基础对象&#xff09; 1.1、示例1 #include "../../lv_examples.h" #if LV_BUILD_EXAMPLESvoid lv_example_obj_1(void) {lv_obj_t * obj1;obj1 lv…

Swift 新结构化并发中鲜为人知的 isolated 参数

概述 伴随着 Swift 5.5&#xff08;WWDC21&#xff09;推出的新结构化并发到今年的 WWDC 24 已经有 3 个多年头了。想必大家都对其中 async/awiat、async let、TaskGroup、Actor 等各种概念都了然于胸了吧&#xff1f; 不过小伙伴们可能不知道的是&#xff1a;新结构化并发&a…

零基础STM32单片机编程入门(五)FreeRTOS实时操作系统详解及实战含源码视频

文章目录 一.概要二.什么是实时操作系统三.FreeRTOS的特性四.FreeRTOS的任务详解1.任务函数定义2.任务的创建3.任务的调度原理 五.CubeMX配置一个FreeRTOS例程1.硬件准备2.创建工程3.调试FreeRTOS任务调度 六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一.概要 FreeRTO…

世界羽坛失去了一位天才选手:如何预防运动场上发生意外

世界羽坛失去了一位天才选手&#xff1a;如何预防运动场上发生意外 --中国羽毛球新星张志杰赛场突发意外&#xff0c;年仅17岁离世 中国羽毛球界的一颗新星、年仅17岁的张志杰&#xff0c;在印尼举行的2024亚洲青年羽毛球锦标赛中不幸离世。这位出生于嘉兴的天才选手&#xf…

北京酒店订房小程序开发的优势与主要功能

随着我国经济与交通的飞速发展&#xff0c;人们出行的次数越来越多&#xff0c;频率也越来越快。无论是出差还是出游&#xff0c;人家对外出酒店的舒适度与便捷度的要求也越来越高。为了满足人们对于酒店的新需求&#xff0c;北京酒店订房小程序与互联网技术相结合&#xff0c;…

经典文献阅读之--BALM2(高效且一致的激光雷达点云束调整)

0. 简介 束调整&#xff08;Bundle Adjustment&#xff0c;BA&#xff09;是指同时确定传感器姿态和场景几何的问题&#xff0c;这是机器人视觉中的一个基本问题。本文提出了一种高效且一致的激光雷达束调整方法。该方法利用边缘和平面特征来表示场景几何&#xff0c;并直接最…

制定全面测试计划:使用TS-GNSS模拟器助力接收器选择

GPS/GNSS信号无处不在&#xff0c;也是目前定位导航应用中最为关键的一环&#xff0c;而GNSS接收器芯片组的低成本和高性能使得将GNSS接收器更容易得集成到以前从未有过的产品中去。由于存在以多种频率传输信号的多个GNSS星座&#xff0c;以及用于提高GNSS精度的各种可用技术&a…

并发控制-事务的调度、数据不一致问题(更新丢失、脏读、不可重复读)、非串行调度的的可串行化

一、引言 1、数据库管理系统DBMS的事务处理技术实现的另一个主要功能部分是并发控制机制。并发控制机制完成的功能就是对并发执行的事务进行控制&#xff0c;保证事务的隔离性&#xff0c;从而进一步保持数据库的一致性。 2、事务的并发控制就是对并发执行的不同事务中的数据…

NLP特征提取的惊人历史演变

NLP特征提取的惊人演变 1.理解特征提取2. 文本表示的演变2.1.词袋的简单性2.2. N-Gram 模型的进步2.3. TF-IDF 的崛起 3. 深入研究词嵌入3.1.探索 Word2Vec3.2.深入了解 GloVe3.3.深入研究 FastText 4. 上下文嵌入的影响4.1 ELMo 的突破4.2 理解 BERT 的机制4.3 Transformer的出…

MySQL-核心知识要点

1、索引的数据结构-Btree BTree的优势&#xff1a; B树的内节点无data&#xff0c;一个节点可以存储更多的K-V对。在构造树时&#xff0c;需要的内节点会更少&#xff0c;那么树的层级也会越低。查询一条数据时&#xff0c;1. 扫描的层级低&#xff0c;扫描过的节点更少&…

Java使用Tessdata做OCR图片文字识别【搬代码】

下载tessdata各语言集合包.zip 找个盘下面解压缩&#xff0c;名字改成英文的 pom文件依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version></dependency>j…

第二天:ALOAM前端讲解【第2部分】

三、scan2scan 3. 帧间匹配 特征关联与损失函数计算 (1)线特征 点到线的距离公式: d ϵ = ∣ ( X ~ ( k +

高温电子设备对设计和可靠性带来挑战

1 高温应用 地下石油和天然气行业&#xff0c;温度&#xff1e;150℃&#xff0c;最高温度可达200℃。 地下钻探作业 地下钻探时&#xff0c;需要收集周围的地质构造&#xff0c;可通过测量电阻率、放射性、声音传播时间、磁共振和其他属性&#xff0c;同时还会监控压力、温度、…

[go-zero] goctl 生成api和rpc

文章目录 1.goctl 概述2.go-zero 需要安装的组件3.生成 api4.生成 rpc 1.goctl 概述 goctl支持多种rpc&#xff0c;较为流行的是google开源的grpc&#xff0c;这里主要介绍goctl rpc protoc的代码生成与使用。protoc是grpc的命令&#xff0c;作用是将proto buffer文件转化为相…

2024.07使用gradle上传maven组件到central.sonatype,非常简单

本文基于sonatypeUploader2.0版本 在1.0版本我们还需要手动去添加maven-publish和signing插件&#xff0c;在2.0版本他已经内置了&#xff0c;如果你仍然需要手动配置&#xff0c;你可以手动添加这两个插件及逻辑。 具体信息参考开源仓库&#xff1a; 插件仓库&#xff1a;h…

GPT-5:博士级智能的破晓,人工智能的新里程碑

随着科技的飞速发展&#xff0c;人工智能领域再次迎来了一场革命性的突破。备受瞩目的新一代大语言模型GPT-5即将在一年半之后发布&#xff0c;这一创新不仅将再次刷新人们对人工智能的认知&#xff0c;更有可能在多个领域展现出超越人类博士级智能的卓越能力。本文将对GPT-5的…