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

【 一 】闪现(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.mfbz.cn/a/762036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dns被莫名篡改的问题定位(笔记)

引言&#xff1a;最近发现用户的多台机器上出现了Dns被莫名修改的问题&#xff0c;从系统事件上看并未能正常确定到是那个具体软件所为&#xff0c;现在的需求就是确定和定位哪个软件具体所为。 解决思路&#xff1a; 首先到IPv4设置页面对Dns进行设置&#xff1a;通过ProcExp…

昇思25天学习打卡营第8天|MindSpore-SSD目标检测

SSD目标检测介绍 SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上,SSD对于输入尺寸300x300的网络,达到74.3%mAP(mean Average Precision)以及59FPS;对于512x512的网络,达到了76.9%mAP ,超…

短视频电商源码怎么选择

随着移动互联网的迅猛发展&#xff0c;短视频电商成为了一种热门的商业模式。很多商家和创业者都希望能够快速搭建一个短视频电商平台来推广和销售自己的产品。然而&#xff0c;选择合适的短视频电商源码并不是一件容易的事情。在选择之前&#xff0c;有一些关键因素需要考虑。…

STC8/32 软硬件I2C通讯方式扫描I2C设备地址

STC8/32 软硬件I2C通讯方式扫描I2C设备地址 📄主要用于检测挂载在I2C总线上的设备。在驱动I2C设备之前,如果能扫描到该设备,说明通讯设备可以连接的上,在提前未知I2C地址的情况下,可以方便后面的驱动代码的完善。 🔬扫描测试效果:(测试mpu6050以及ssd1306 i2c oled )…

本科学历|艺术创业公司经理限定美国西部访问学者申请成功

U经理属于自费访学&#xff0c;本科学历&#xff0c;无文章及课题&#xff0c;但有较丰富的艺术创意及艺术教育实际操作经验&#xff0c;要求申美国西部地区的学校。最终我们为其获得俄勒冈州立大学访问学者邀请函。之前拟定的申请设想全部实现&#xff1a;西部地区、专业契合、…

【Lua小知识】Vscode中Emmylua插件大量报错的解决方法

起因 Vscode写Lua用的好好的&#xff0c;最近突然出现了大量报错。 看报错是有未定义的全局变量&#xff0c;这里查日志才发现是由于0.7.5版本新增诊断启用配置&#xff0c;所以导致了原先好的代码&#xff0c;现在出现了大量的报错。 解决方案一 最直接的方法当然是在配置中直…

【单片机毕业设计选题24040】-基于STM32的蓝牙防丢器设计

系统功能: 系统上电后显示“欢迎使用蓝牙防丢系统请稍后”两秒钟显示正常界面&#xff0c;如果蓝牙正常连接OLED显示Connected, 蓝牙未连接则显示DisConnected同时蜂鸣器报警 蓝牙正常连接后在APP上每隔三秒显示一个Connected 系统功能框图: 主要功能模块原理图: 电源时钟…

CSS|04 复合选择器伪类选择器属性选择器美化超链接

基本选择器&#xff1a;见上篇基本选择器 复合选择器选择器1,选择器2{属性:值;} 多元素选择器&#xff0c;同时匹配选择器1和选择器2&#xff0c;多个选择器之间用逗号分隔举例&#xff1a; p,h1,h2{margin:0px;}E F{属性:值;} 后代元素选择器&#xff0c;匹配所有属于E元素后…

【Python机器学习】模型评估与改进——分组交叉验证

分组交叉验证是非常常见的一种交叉验证策略&#xff0c;它适用于数据中的分组高度相关时。比如我们想构建一个从人脸图片中识别情感的系统&#xff0c;并且收集了100个人的照片的数据集&#xff0c;其中每个人都进行了多次拍摄&#xff0c;分别展示了不同的情感。我们的目标是构…

Python 文件操作

文件编码 将文件的内容翻译为二进制 文件操作 打开文件 open函数 语法&#xff1a; open(name, mode, encoding)name&#xff1a;文件名的字符串&#xff0c;可以包含具体路径。若没有路径&#xff0c;则默认为与py文件位于同一层 mode&#xff1a;打开文件的模式&#xf…

PP-JITTER \RMS-JITTER 及其他Jitter解析

Jitter概念 Jitter(抖动)是从时域评价时钟信号质量的重要参数。 首先要明确的是它是一个统计量,因此有标准差(均方根,rms)和范围(峰峰值,p2p); 然后根据样本的类型可以划分成不同的分类,如Jabs(absolute jitter)、Jp(period jitter)、Jc2c(cycle-to-cycle ji…

Forecasting from LiDAR via Future Object Detection

Forecasting from LiDAR via Future Object Detection 基础信息 论文&#xff1a;cvpr2022paper https://openaccess.thecvf.com/content/CVPR2022/papers/Peri_Forecasting_From_LiDAR_via_Future_Object_Detection_CVPR_2022_paper.pdfgithub&#xff1a;https://github.co…

UWB透传模块-通信距离1KM UWB650 透明传输 | 双向测距 | 定位模块

UWB650模块是思为无线推出的一款基于UWB&#xff08;Ultra Wide Band&#xff0c;超宽带&#xff09;技术的无线通讯模块&#xff0c;遵循IEEE 802.15.4-2020 Standard协议。UWB650模块是在UWB3000F27基础上研发&#xff0c;使该模块拥有0.5W的高功率功放芯片。用户无需去设计电…

Ubuntu使用chkconfig命令时报错:chkconfig: command not found解决办法

文章目录 前言一、安装sysv-rc-conf1.1 引入库安装可能报错&#xff1a;E: Unable to locate package sysv-rc-conf1.2 添加镜像源后更新安装源&#xff1a;1.3 更新安装源可能报错如下内容&#xff1a;1.4 添加密钥1.5 添加密钥后更新安装源&#xff1a;1.6 用apt-get安装sysv…

能源企业的“宿命”,是成为穿越时代的传奇

2012年&#xff0c;杰里米里夫金的《第三次工业革命》出版&#xff0c;他在书中提出了能源互联网的观点&#xff0c;将互联网技术和可再生能源结合起来&#xff0c;用以支持未来的产业革命。 里夫金不愧是和凯文凯利&#xff08;KK&#xff09;齐名的未来学家&#xff0c;十几…

fastapi swagger在线接口文档报错

fastapi swagger在线接口文档报错 1、报错信息 Unable to render this definition The provided definition does not specify a valid version field. Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: “2.0” and those …

Python笔记 json数据格式的转换

一、json数据格式 1.什么是json json是一种轻量级的数据交互格式。可以按照json指定的格式去组织和封装数据 json本质上是一个带有特定格式的字符串 主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互。类似…

Windows电脑自建我的世界MC服务器并与好友远程联机游戏教程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

红海云签约茉莉奶白,引领茶饮行业人力资源数字化新潮流

关于茉莉奶白 茉莉奶白&#xff0c;始于深圳&#xff0c;以茉莉为首的东方四白花为灵感&#xff0c;择高山茗茶以花窨之法制茶&#xff0c;专注茉莉香中国茶。一直坚持对茉莉的极致探索&#xff0c;从视觉到味蕾完美诠释东方摩登。让现代年轻人在日常中感知东方花道与茶道的魅力…

函数创建单链表---无n型,需要 while 循环 + scanf

题目&#xff1a; #include <stdlib.h> struct link{int data;struct link *next; }; struct link* creatLink(); int main(){struct link *head,*p;headcreatLink();for(phead->next ;p;pp->next )printf("%d ",p->data );return 0; }/* 请在这里填…