4-flask-cbv源码、Jinja2模板、请求响应、flask中的session、flask项目参考
1 flask中cbv源码
2 Jinja2模板
3 请求响应
4 flask中的session
5 flask项目参考
1 flask中cbv源码
***flask的官网文档:***https://flask.palletsprojects.com/en/3.0.x/views/1 cbv源码执行流程'''1 请求来了,路由匹配成功---》执行ItemAPI.as_view('item')()--->view加括号执行2 ItemAPI.as_view('item')执行结果:就是View中as_view方法中的闭包函数 view3 view()--->执行self.dispatch_request()---》执行MethodView的dispatch_requestdef dispatch_request(self, **kwargs):meth = getattr(self, request.method.lower(), None)return meth(**kwargs)4 如果是get请求,就会执行视图类中的get方法class View:@classmethoddef as_view()def view():self.dispatch_request()return view'''2 endpoint 的使用app.add_url_rule('/item', endpoint='xxx',view_func=ItemAPI.as_view('item'))如果写了endpoint---》别名以它为准,如果不写以as_view的参数为准3 逻辑:1 app.add_url_rule('/item',endpoint='xxx', view_func=ItemAPI.as_view('item'))2 endpoint = _endpoint_from_view_func(view_func)如果endpoint没传,就会走这句view_func 是 ItemAPI.as_view('item') 它就是 view3 _endpoint_from_view_func(view_func)---》返回了传入的函数的名字return view_func.__name__4 如果上面传入了ItemAPI.as_view('item'),它的函数名就是view---》endpoint就是view## 总结:endpoint如果不传,会以视图函数的函数名作为endpoint-fbv:如果不写endpoint,会以函数名作为endpoint,但是如果多个视图函数加了同一个装饰器,又没有指定endpoint,就会出错了-cbv:调用as_view一定要传入一个字符串---》如果endpoint没写,endpoint就是传入的这个字符串,如果写了,这个字符串没用如果传了,直接以endpoint传入的作为endpoint### cbv中加装饰器1 使用步骤:在类中加入类属性:class ItemAPI(MethodView):decorators = [装饰器,装饰器2]def get(self):# print(url_for('xxx'))print(url_for('item'))return 'get'2 if cls.decorators:for decorator in cls.decorators:view = decorator(view) '''@装饰器def view()'''
### 整个cbv执行流程
# View的as_view
@classmethod
def as_view(cls, name, *class_args, **class_kwargs) :def view(**kwargs):return self.dispatch_request(**kwargs)if cls.decorators: # 咱们的装饰器for decorator in cls.decorators: #每次拿出一个装饰器,view = decorator(view) # 装饰器语法糖干的事: 把被装饰的函数当参数传入到装饰器,返回结果赋值给被装饰的函数,一个个用装饰器包装viewview.__name__ = namereturn view# self.dispatch_request---》MethodView
def dispatch_request(self, **kwargs) :# 取到request.method.lower()请求方式小写 ---》假设是get请求get# meth是 cbv中 以get命名的方法,反射出来了meth = getattr(self, request.method.lower(), None)return meth(**kwargs) # 执行cbv中跟请求方式同名的方法
def register_api(app, model, name):item = ItemAPI.as_view(f"{name}-item", model)group = GroupAPI.as_view(f"{name}-group", model)app.add_url_rule(f"/{name}/<int:id>", view_func=item) # get put deleteapp.add_url_rule(f"/{name}/", view_func=group) #post get register_api(app, User, "users")
register_api(app, Story, "stories")
2 Jinja2模板
# flask使用了Jinja,flask提供了文档,也可以去Jinja官网看
https://flask.palletsprojects.com/en/3.0.x/
https://jinja.palletsprojects.com/en/3.1.x/# 总结:之前学过dtl-{{变量/简单表达式/函数}}-{%if/for %} {%endif%} {%endfor%}-比dtl强大 ,Jinja中可以加括号-字典取值,列表取值跟python语言一样,之前dtl 通过 .取值-过滤器,标签-extends,include 跟之前一样
3 请求响应
# 所有web:请求对象,响应对象(go,java,ptyhon)django:request(每个请求一个request),新手四件套flask: requset:全局的,但是也是每个请求一个request,新手三件套# request 全局对象,用起来,跟之前django的一样# request.method 请求的方法# request.args get请求提交的数据# request.form post请求提交的数据# request.values post和get提交的数据总和# request.cookies 客户端所带的cookie# request.headers 请求头# request.path 不带域名,请求路径# request.full_path 不带域名,带参数的请求路径# request.url 带域名带参数的请求路径# request.base_url 带域名请求路径# request.url_root 域名# request.host_url 域名# request.host 服务端地址# request.files# obj = request.files['the_file_name']# obj.save('/var/www/uploads/' + secure_filename(f.filename))# 响应 response---》四件套-return '字符串'-return render_template('index.html',name=lqz,age=19)-return redirect(url_for(别名))-return jsonify(字典,列表) # 往cookie中写数据--->四件套需要使用obj=make_response('index')obj.set_cookies() # 跟之前一样# obj.headers[]
4 session
# cookie 机制
# 设置
obj=make_response('index')
obj.set_cookies('name','lqz')
# 取
request.cookie.get('name')# session机制1 设置秘钥2 写入sessionsession['username']='xxx'3 取出sessionusername = session.get('username')

5 flask项目参考
# 开源项目阅读
https://toscode.mulanos.cn/pear-admin/pear-admin-flask# 1 git clone https://toscode.mulanos.cn/pear-admin/pear-admin-flask
# 2 使用pycharm打开
# 3 创建虚拟环境,装依赖
# 4 改配置文件MYSQL_USERNAME = "root"MYSQL_PASSWORD = "lqz123?"MYSQL_HOST = "127.0.0.1"MYSQL_PORT = 3306MYSQL_DATABASE = "PearAdminFlask"# 数据库的配置信息# SQLALCHEMY_DATABASE_URI = 'sqlite:///../pear.db'SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{urlquote(MYSQL_PASSWORD)}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4"# 5 创建数据库 PearAdminFlask# 6 执行初始化flask db init#7 migrate.bat
# 8 flask admin init
# 9 启动
run.bat# 10 改代码---》密码不判断相关文章:
4-flask-cbv源码、Jinja2模板、请求响应、flask中的session、flask项目参考
1 flask中cbv源码 2 Jinja2模板 3 请求响应 4 flask中的session 5 flask项目参考 1 flask中cbv源码 ***flask的官网文档:***https://flask.palletsprojects.com/en/3.0.x/views/1 cbv源码执行流程1 请求来了,路由匹配成功---》执行ItemAPI.as_view(item…...
2.Pandas数据预处理
2.1 数据清洗 以titanic数据为例。 df pd.read_csv(titanic.csv) 2.1.1 缺失值 (1)缺失判断 df.isnull() (2)缺失统计 # 列缺失统计 df.isnull().sum(axis0) # 行缺失统计 df.isnull().sum(axis1) # 统计缺失率 df.isnu…...
C# IEnumerable<T>介绍
IEnumerable 是 C# 中的一个接口,它是 .NET Framework 中的集合类型的基础。任何实现了 IEnumerable 接口的对象都可以进行 foreach 迭代。 IEnumerable 只有一个方法,即 GetEnumerator,该方法返回一个 IEnumerator 对象。IEnumerator 对象用…...
九洲
《九洲》 作者/罗光记 九洲春色映朝阳, 洲渚风光似画廊。 柳絮飘飞花似雪, 九州繁华共锦裳。 水波荡漾鱼儿跃, 洲边鸟语唤晨光。 春风拂过千里岸, 九洲儿女笑语扬。...
基于Genio 700 (MT8390)芯片的AR智能眼镜方案
AR眼镜是一种具有前所未有发展机遇的设备,无论是显示效果、体积还是功能都有明显的提升。AR技术因其智能、实时、三维、多重交互和开放世界的特点备受关注。 AR眼镜集成了AR技术、语音识别、智能控制等多项高科技功能,可以帮助用户实现更加便捷、高效、个…...
锐捷OSPF认证
一、知识补充 1、基本概述 OSPF区域认证和端口认证是两种不同的认证机制,用于增强OSPF协议的安全性。 OSPF区域认证(OSPF Area Authentication):这种认证机制是基于区域的。在OSPF网络中,每个区域都可以配置一个区域…...
M2 Mac Xcode编译报错 ‘***.framework/‘ for architecture arm64
In /Users/fly/Project/Pods/YYKit/Vendor/WebP.framework/WebP(anim_decode.o), building for iOS Simulator, but linking in object file built for iOS, file /Users/fly/Project/Pods/YYKit/Vendor/WebP.framework/WebP for architecture arm64 这是我当时编译模拟器时报…...
Python算法题2023 输出123456789到98765432中完全不包含2023的数有多少
题目: 无输入,只需输出结果🤐 这个数字比较大,小伙伴们运行的时候要给代码一点耐心嗷つ﹏⊂ ,下面是思路,代码注释也很详细,大致看一下吧(^∀^●)…...
SpringBoot整合Thymeleaf
Thymeleaf 支持 HTML 原型,可以让前端工程师在浏览器中直接打开查看样式,也可以让后端工程师结合真实数据查看显示效果 Thymeleaf 除了展示基本的 HTML ,进行页面渲染之外,也可以作为一个 HTML 片段进行渲染,例如我们在…...
OpenAI的多函数调用(Multiple Function Calling)简介
我在六月份写了一篇关于GPT 函数调用(Function calling) 的博客https://blog.csdn.net/xindoo/article/details/131262670,其中介绍了函数调用的方法,但之前的函数调用,在一轮对话中只能调用一个函数。就在上周,OpenAI…...
在国内购买GPT服务前的一定要注意!!!
本人已经入坑GPT多日,从最开始的应用GPT到现在的自己研发GPT,聊聊我对使用ChatGPT的一些思考,有需要使用GPT的朋友或者正在使用GPT的朋友,一定要看完这篇文章,可能会比较露骨,也算是把国内知识库、AI的套路…...
Redis新操作
1.Bitmaps 1.1概述 Bitmaps可以对位进行操作,实际上它就是一个字符串,可以将Bitmaps想象为一个以位为单位的数组,数组中的每个元素只能存储0或者1,数组的下标在Bitmaps被称为偏移量。 setbit key offset value:设置o…...
Panda3d 外部硬件接口介绍
Panda3d 外部硬件接口介绍 文章目录 Panda3d 外部硬件接口介绍键盘支持(Keyboard Support)轮询接口击键事件原始键盘事件鼠标支持(Mouse Support)鼠标模式绝对鼠标模式相对鼠标模式受限鼠标模式验证鼠标模式多个鼠标(Multiple Mice )Linux 下的多个鼠标(Multiple Mice u…...
解决Redis分布式锁宕机出现不可靠问题-zookeeper分布式锁
核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。 客户端获取锁时,在 lock 节点下创建临时顺序节点。然后获取 lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己…...
mac系统安装docker desktop
Docker的基本概念 Docker 包括三个基本概念: 镜像(Image):相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。比如说nginx,mysql,redis等软件可以做成一个镜像。容器&#…...
【机器学习基础】机器学习的基本术语
🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…...
区别Vue 2.0 和 Vue 3.0
Vue 3.0 是在 Vue 2.0 的基础上进行了重大的更新和改进。下面列举了一些主要的区别: 性能优化 Proxy 取代 Object.defineProperty:Vue 3.0 中使用 Proxy 监听数据的变化,相比 Vue 2.0 使用 Object.defineProperty,性能有所提升。…...
react antd下拉选择框选项内容换行
下拉框选项字太多,默认样式是超出就省略号,需求要换行全展示,选完在选择框里还是要省略的 .less: .aaaDropdown {:global {.ant-select-dropdown-menu-item {white-space: pre-line !important;word-break: break-all !important;}} } html…...
图像分类(一) 全面解读复现AlexNet
解读 论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf Abstract-摘要 翻译 我们训练了一个庞大的深层卷积神经网络,将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不…...
JAXB实现XML和Bean相互转换
目录 XML和Bean转换工具简介JAXB简介Java Bean类XMLUtil工具类 另一篇转换方式 xstream实现xml和java bean 互相转换 XML和Bean转换工具简介 Java中实现XML和Bean的转换的方式或插件有以下几种: JAXB(Java Architecture for XML Binding)&…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
