二、Flask会话技术和模板语言

Cookie

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

Session

在这里插入图片描述

在这里插入图片描述

# views.py: 路由 + 视图函数
import datetimefrom flask import Blueprint, render_template, request, redirect, session
from .models import *# 蓝图
blue = Blueprint('user', __name__)# 首页 可以写两个路由,都是访问同一个函数
@blue.route('/')
@blue.route('/home/')
def home():# 4. 获取cookie# username = request.cookies.get('user')# 获取sessionusername = session.get('user')print('username',username)return render_template('home.html', username=username)# 登录
@blue.route('/login/', methods=['GET', 'POST'])
def login():# GET:访问登录页面if request.method == 'GET':return render_template('login.html')# POST: 实现登录功能elif request.method == 'POST':pass# 1. 获取前端提交过来的数据username = request.form.get('username')password = request.form.get('password')# 2. 模拟登录:用户名和密码验证if username == 'lisi' and password == '123':# 登录成功response = redirect('/home/')# 3. 设置cookie#    cookie不能用中文# response.set_cookie('user', username)  # 默认浏览器关闭则cookie失效# 过期时间:#   max_age: 秒#   expires: 指定的datetime日期# response.set_cookie('user', username, max_age=3600*24*7)# response.set_cookie('user', username, expires=datetime.datetime(2023, 12, 12))# 设置sessionsession['user'] = usernamesession.permanent = Truereturn responseelse:return '用户名或密码错误!'# 注销
@blue.route('/logout/')
def logout():response = redirect('/home/')# 5.删除cookie# response.delete_cookie('user')# 删除sessionsession.pop('user')# session.clear()  # 慎用,会删除服务器下的所有sessionreturn response

Templates

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

模板语法

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

在这里插入图片描述

在这里插入图片描述

循环判断

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Home</title>
</head>
<body><h2>Home</h2><hr>{#  模板语言的注释   #}<h4>变量:</h4><p>name: {{ name }}</p><p>age: {{ age }}</p><p>likes: {{ likes }}</p><hr><h4>标签:</h4><h5>if语句</h5>{% if age >= 18 %}<p>{{ name }}已经成年了</p>{% elif age >= 6 %}<p>{{ name }}可以上学了</p>{% else %}<p>{{ name }} 还是小孩 </p>{% endif %}<h5>for循环</h5>{% for like in likes %}{% if loop.first %}<p style="color: red;">{{ like }}</p>{% elif loop.last %}<p style="color: blue;">{{ like }}</p>{% else %}<p>{{ like }}</p>{% endif %}index: {{ loop.index }},index0: {{ loop.index0 }},revindex: {{ loop.revindex }},revindex0: {{ loop.revindex0 }}{% else %}<b>else</b>{% endfor %}<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>

结构标签

  • base.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>父模板</title>{#  通用css文件   #}<link rel="stylesheet" href="{{ url_for('static', filename='css/base.css') }}">{% block extcss %}{% endblock %}
</head>
<body>{% block head %}{% endblock %}<hr>{% block content %}{% endblock %}<hr>{% block foot %}{% endblock %}{#  通用的js文件  #}<script src="{{ url_for('static', filename='js/base.js') }}"></script>{% block extjs %}{% endblock %}</body>
</html>
  • child1.html
{% extends 'base.html' %}{% block head %}<div><p>python YYDS Head</p></div>
{% endblock %}
  • child2_include.html
<div>我是child2中include的内容</div>
  • child2.html
{# 继承父模板 #}
{% extends 'child1.html' %}{# super #}
{% block head %}
<!--super() 会保留child1.html中的内容-->{{ super() }}<p>Python</p>
{% endblock %}{# include #}
{% block content %}
<!--  将child2_include中内容在此处加载-->{% include 'child2_include.html' %}<p>Flask Content</p>
{% endblock %}{# 宏定义:Python函数 #}
{% macro person(name, age) %}<b>姓名:{{ name }}, 年龄:{{ age }}</b>
{% endmacro %}{% block foot %}
<!--调用宏定义的函数-->{{ person("坤坤", 25) }}{#  过滤器  #}<p>{{ name | capitalize }}</p>
<!-- 首字母大写--><p>{{ name | title }}</p><p>{{ name | upper }}</p><p>{{ name | lower }}</p><p>{{ name | upper | first | lower }}</p><p>{{ name2 | default('kunkun') }}</p><p>...</p>{% endblock %}

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

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

相关文章

【数据结构】泛型(分享重点)

什么是泛型&#xff1f; 泛型就是适用于许多许多类型&#xff0c;对类型参数化。 怎么创建一个泛型呢 class 泛型类名称<类型形参列表> { // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> { } class 泛型类名称<类型形参列表> extends 继承类…

微服务之LoadBalancer负载均衡服务调用

一、概述 1.1什么是负载均衡 LB&#xff0c;既负载均衡&#xff08;Load Balancer&#xff09;,是高并发、高可用系统必不可少的关键组件&#xff0c;其目标是尽力将网络流量平均分发到多个服务器上&#xff0c;以提高系统整体的响应速度和可用性。 负载均衡的主要作用 高并发…

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于RIME-SVR霜冰算法优化支持向量机的数…

MySQL优化慢SQL的6种方式

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《mysql经验总结》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 优化思路 优化方法 1.避免查询不必要的列 2.分页优化 3.索引优化 4.JOIN优化 5.排序优化 6.UNION 优化…

无线网络2.4和5G的区别

无线网络2.4和5的区别 无线网络2.4GHz和5GHz的主要区别在于频率、覆盖范围、传输速度、干扰能力和穿透性。以下是详细介绍&#xff1a;12 频率不同。2.4GHz的频率较低&#xff0c;而5GHz的频率较高。频率越低&#xff0c;信号在传播过程中的损失越小&#xff0c;因此覆盖范围…

linux学习:文件属性

在操作文件的时候&#xff0c;经常需要获取文件的属性&#xff0c;比如类型、权限、大小、所有者等等&#xff0c; 这些信息对于比如文件的传输、管理等是必不可少的&#xff0c;而这些信息 这三个函数的功能完全一样&#xff0c;区别是&#xff1a;stat( )参数是一个文件的名字…

网络篇05 | 应用层 http/https

网络篇05 | 应用层 http/https 01 HTTP请求报文协议&#xff08;Request&#xff09;1&#xff09;Request简述2&#xff09;请求行&#xff08;首行&#xff09;3&#xff09;请求头&#xff08;Request Headers&#xff09;4&#xff09;空行5&#xff09;正文&#xff08;Re…

【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?

一、均方误差&#xff08;Mean Squared Error, MSE&#xff09; 假设你是一个教练&#xff0c;在指导学生射箭。每次射箭后&#xff0c;你可以测量子弹的落点距离靶心的差距&#xff08;误差&#xff09;。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets 4.1 Clock and clock enables 时钟和时钟使能 Cortex-R52处理器具有一个单一的时钟&#xff0c;驱动着所有的触发器和RAM。各种输入&#xff0c;包括复位输入&#xff0c;都有同步逻辑使它们可以与处理器时钟异步操…

如何在MacOS上使用OpenHarmony SDK交叉编译?

本文以cJSON三方库为例介绍如何通过OpenHarmony的SDK在Mac平台进行交叉编译。 环境准备 SDK准备 我们可以通过 openHarmony SDK 官方发布渠道下载对应mac版本的SDK&#xff0c;当前OpenHarmony MAC版本的SDK有2种&#xff0c;一种是x86架构&#xff0c;另一种是arm64&#x…

做一个后台项目的架构

后台架构的11个维度 架构1&#xff1a;团队协助基础工具链的选型和培训架构2&#xff1a;搭建微服务开发基础设施架构3&#xff1a;选择合适的RPC框架架构4&#xff1a;选择和搭建高可用的注册中心架构5&#xff1a;选择和搭建高可用的配置中心架构6&#xff1a;选择和搭建高性…

Hudi-ubuntu环境搭建

hudi-ubuntu环境搭建 运行 1.编译Hudi #1.把maven安装包上传到服务器 # 官网下载安装包 https://archive.apache.org/dist/maven/maven-3/ scp -r D:\Users\zh\Desktop\Hudi\compressedPackage\apache-maven-3.6.3-bin.tar.gz zhangheng10.8.4.212:/home/zhangheng/hudi/com…

Spring+SpringMVC的知识总结

一:技术体系架构二:SpringFramework介绍三:Spring loC容器和核心概念3.1 组件和组件管理的概念3.1.1什么是组件:3.1.2:我们的期待3.1.3Spring充当组件管理角色(IOC)3.1.4 Spring优势3.2 Spring Ioc容器和容器实现3.2.1普通和复杂容器3.2.2 SpringIOC的容器介绍3.2.3 Spring IOC…

字符串常量池(StringTable)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String&#xff1a;字符串&#xff0c;使用一对""引起来表示 String声明为final的&#xff0c;不可被继承 String实现了Serializable接口&#xff1a;表示字符串是支持…

考试酷基本功修炼课学习历程_FPGA成长篇

本文为明德扬原创文章&#xff0c;转载请注明出处&#xff01;作者&#xff1a;明德扬学员&#xff1a;考试酷账号&#xff1a;11167760 我是硬件工程师&#xff0c;日常工作中主要跟数字电路、模拟电路、嵌入式系统打交道&#xff0c;当然也会涉及到FPGA&#xff0c;但是苦于…

排序算法-基数排序

基数排序是一种非比较排序算法&#xff0c;它将待排序的数字按照位数进行排序。基数排序的思想是先按照个位数进行排序&#xff0c;然后按照十位数进行排序&#xff0c;接着按照百位数进行排序&#xff0c;以此类推&#xff0c;直到最高位排序完成。 基数排序的步骤如下&#x…

设计模式代码实战-桥接模式

1、问题描述 小明家有一个万能遥控器&#xff0c;能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作&#xff0c;请你使用桥接模式模拟这个操作。 输入示例 6 0 2 1 2 0 4 0 3 1 4 1 3 输出示例 Sony TV is ON TCL TV is ON Switching Sony TV channel S…

【菜狗学前端】原生Ajax笔记(包含原生ajax的get/post传参方式、返回数据等)

这回图片少&#xff0c;给手动替换了~祝看得愉快&#xff0c;学的顺畅&#xff01;哈哈 一 原生ajax经典四步 (一) 原生ajax经典四步 第一步&#xff1a;创建网络请求的AJAX对象&#xff08;使用XMLHttpRequest&#xff09; JavaScript let xhr new XMLHttpRequest() 第二…

QQ农场-phpYeFarm添加数据教程

前置知识 plugin\qqfarm\core\data D:\study-project\testweb\upload\source\plugin\qqfarm\core\data 也就是plugin\qqfarm\core\data是一个缓存文件,如果更新农场数据后,必须要删除才可以 解决种子限制(必须要做才可以添加成功) 你不更改加入了id大于2000直接删除种子 D…

Vulnhub靶机 DC-2渗透详细过程

VulnHub靶机 DC-2 打靶 目录 VulnHub靶机 DC-2 打靶一、将靶机导入到虚拟机当中二、攻击方式主机发现端口扫描服务探针爆破目录web渗透信息收集扫描探针登录密码爆破SSH远程登录rbash提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.com/entry/dc…