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 改代码---》密码不判断

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

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

相关文章

软件质量保护与测试(第2版)学习总结第十三章 集成测试

很多人都认为微软是一家软件开发公司&#xff0c;事实上我们是一家软件测试公司。 ---比尔盖茨 集成测试是在单元测试的基础上将多个模块组合在一起进行测试的过程。 13.1.1 区别 单元测试主要关注模块内部&#xff0c;系统测试则是在用户的角度来评价系统&#xff…

Pikachu漏洞练习平台之XXE(XML外部实体注入)

目录 什么是 XML&#xff1f; 什么是DTD&#xff1f; 什么是XEE&#xff1f; 常见payload 什么是 XML&#xff1f; XML 指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09;&#xff1b; XML 不会做任何事情&#xff0c;而是用来结构化、存储以及传输信息…

10、背景分离 —— 大津算法

上一节学习了通过一些传统计算机视觉算法,比如Canny算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。 今天再看一个视觉中更常见的应用,那就是把图片的前景和背景的分离。 前景和背景 先看看什么是前景什么是背景。 在图像处理和计算机视觉中,"前景"…

CTFhub-RCE-过滤空格

1. 查看当前目录&#xff1a;127.0.0.1|ls 2. 查看 flag_890277429145.php 127.0.0.1|cat flag_890277429145.php 根据题目可以知道空格被过滤掉了 3.空格可以用以下字符代替&#xff1a; < 、>、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 $IFS在li…

idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable

场景&#xff1a; idea警告某些maven依赖包有漏洞或者依赖传递有易受攻击包&#xff0c;如下&#xff1a; 解决&#xff1a; 1、打开idea设置&#xff0c;找到 File | Settings | Editor | Inspections 2、取消上述两项勾选即可

基于libcurl+libopenssl开源库编译出curl下载工具及代码集成curl功能

准备素材&#xff1a; 1. openssl的版本&#xff1a; openssl-1.1.1w.tar.gz 2.curl的版本&#xff1a;curl-8.4.0.tar.gz 目标&#xff1a; 1.编译出openssl库&#xff1b; 2.编译出curl可执行文件及库&#xff1b; 步骤一&#xff1a;先解压压缩包 tar -zxvf openssl-1…

Topaz Video AI:引领视频质量革命,让您的内容焕发新生

随着数字媒体的日益普及&#xff0c;视频质量的重要性日益凸显。无论是个人用户还是专业团队&#xff0c;都需要确保他们的视频内容具有最佳的质量。但是&#xff0c;由于各种原因&#xff0c;如设备限制、环境干扰等&#xff0c;往往导致视频质量不尽如人意。这时&#xff0c;…

重命名com1.{d3e34b21-9d75-101a-8c3d-00aa001a1652}文件夹

今天在win10系统上&#xff0c;发现一个名称为: com1.{d3e34b21-9d75-101a-8c3d-00aa001a1652} 的文件夹&#xff0c;该文件夹很奇怪&#xff0c;既不能手动删除&#xff0c;也不能手动给文件夹重命名&#xff0c;如图(1)所示&#xff1a; E:\EncodeOne\hello\Thumbs.ms\com1.…

uni-app 使用vscode开发uni-app

安装插件 uni-create-view 用于快速创建页面 配置插件 创建页面 输入页面名称&#xff0c;空格&#xff0c;顶部导航的标题&#xff0c;回车 自动生成页面并在pages.json中注册了路由 pages\login\login.vue <template><div class"login">login</d…

SourceTree提示128错误

错误&#xff1a; SourceTree打开报错&#xff1a;git log 失败&#xff0c;错误代码128 错误截图&#xff1a; 解决方法&#xff1a; 第一种&#xff1a; 打开电脑路径 C:\Users\Administrator &#xff0c;删除下面的【.gitconifg】文件 第二种&#xff1a; 如果上述方法…

【csapp lab】lab2_bomblab

文章目录 前言实验内容phase_1phase_2phase_3phase_4phase_5phase_6secret_phase 前言 刚做了csapp lab2&#xff0c;记录一下。 我这里用的的系统环境是Ubuntu22.04&#xff0c;是64位系统&#xff0c;与用32位系统可能有所差异。 实验共包括七个阶段&#xff0c;每个阶段考…

4月2日-3日·上海 | 3DCC 第二届3D细胞培养与类器官研发峰会携手CGT Asia 重磅来袭

类器官&#xff08;Organoids&#xff09;作为干细胞研究领域最重要的成果之一&#xff0c;在基础医学研究、转化医学及药物研发领域展现出巨大的应用潜力&#xff0c;特别是在精准医疗以及药物安全性和有效性评价等方向凭借其先天优势引起了极大的市场关注&#xff0c;成为各大…

【智能家居】5、主流程设计以及外设框架编写与测试

目录 一、主流程设计 1、工厂模式结构体定义 &#xff08;1&#xff09;指令工厂 inputCmd.h &#xff08;2&#xff09;外设工厂 controlDevices.h 二、外设框架编写 1、创建外设工厂对象bathroomLight 2、编写相关函数框架 3、将浴室灯相关操作插入外设工厂链表等待被调…

pm2在Windows环境中的使用

pm2 进程管理工具可以Windows操作系统上运行&#xff0c;当一台Windows电脑上需要运行多个进程时&#xff0c;或者运维时需要运行多个进程以提供服务时。可以使用pm2&#xff0c;而不再是使用脚本。 1. 使用PM2管理进程 1.1. 启动PM2项目 1.1.1. 直接启动项目 参数说明&…

springboot集成nacos并实现自动刷新

目录 1.说明 2.示例 3.自动刷新的注意点 1.说明 springboot项目中存在好多配置文件&#xff0c;比如配置数据信息&#xff0c;redis信息等等&#xff0c;配置文件可以直接放在代码&#xff0c;也可以放在像nacos这样的组件中&#xff0c;实现动态的管理&#xff0c;修改配置…

浅谈滑动窗口

滑动窗口是什么&#xff1f; 滑动窗口其实是一个想象出来的数据结构。有左边界L和有边界R。 举例来说&#xff1a;数组 arr {3,1,5,7,6,5,8}; 其窗口就是我们规定的一个运动轨迹。 最开始时&#xff0c;边界LR都在数组的最左侧&#xff0c;此时没有包住任何数。 此时规定&…

ExoPlayer架构详解与源码分析(9)——TsExtractor

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

linux进程之进程的优先级➕环境变量

文章目录 1.优先级的认识1.1优先级的介绍1.2初识优先级1.3ps指令1.4查看/修改进程的优先级1.5对优先级的认识1.6对进程的深一步理解 2.环境变量2.0环境变量相关的命令2.1环境变量的概念2.2常见/查看环境变量2.3环境变量的作用2.4修改环境变量1.将zombie可执行程序放到PATH现有的…

CF1899B 250 Thousand Tons of TNT

题目链接 题目 题目大意 T T T 组测试数据 每组 n n n 个货物&#xff0c;第 i i i 个货物 的重量是 a i a_i ai​ 用k辆货车按顺序装这些货物&#xff0c;条件是每辆车上的货物个数都一样&#xff0c;也即是说 n n n 必须能被 k k k 整除&#xff0c; 求任意两辆车货物总…

Alibaba Nacos注册中心实战

为什么需要注册中心 思考&#xff1a;网络请求&#xff0c;如果服务提供者发生变动&#xff0c;服务调用者如何感知服务提供者的ip和端口变化&#xff1f; // 微服务之间通过RestTemplate调用&#xff0c;ip:port写死&#xff0c;如果ip或者port变化呢&#xff1f; String ur…