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算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。 今天再看一个视觉中更常见的应用,那就是把图片的前景和背景的分离。 前景和背景 先看看什么是前景什么是背景。 在图像处理和计算机视觉中,"前景"…

Java Swing模拟银行自动取款机

内容要求 1&#xff09; 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法&#xff0c;在进行代码编写前要能够设计好自己的算法。 2&#xff09;本次程序设计涉及到 Java 的基本语法&#xff0c;即课堂上所…

什么是静态代理、JDK动态代理、cglib动态代理?

静态代理 package com; /*** author jiaxinxiao* date 2020年2月18日* 静态代理类的缺点&#xff1a;* 一个代理类只能对一个业务接口的实现类进行包装* 如果有多个业务接口的话就要定义很多实现类和代理类才行* 如果代理类对业务方法的预处理、调用后操作都是一样的&#xff…

Leetcode82删除排序链表中重复元素2

代码&#xff1a; 为了找到结果的head 可以在head前加一个dummy dummy->head 再顺序去重 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* Lis…

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…

Node.js之path路径模块

让我为大家介绍一下path路径模块吧&#xff01; 什么是path路径模块&#xff1f; path 模块是 Node.s 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对路径的处理需求。 介绍三个关于path模块的方法&#xff1a; path.join() 方法&…

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;每个阶段考…

了解异常的特性

导言&#xff1a; 在代码时&#xff0c;即使尽可能的避开错误&#xff0c;但在程序的与运行过程中难免会出现问题&#xff0c;它可能会导致程序中断或出现不可预料的结果。本篇文章主要对异常出现时如何进行处理&#xff0c;以及如何尽量将异常实现可控化&#xff0c;进行概述…

stm32 HSUSB

/ stm32f407xx.h #define USB_OTG_HS_PERIPH_BASE 0x40040000UL #define USB_OTG_HS ((USB_OTG_GlobalTypeDef *) USB_OTG_HS_PERIPH_BASE) // // 定义全局变量 USBD_HandleTypeDef hUsbDeviceHS;并默认全零初始化/* USB Device handle structure */ typedef struct _USB…

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

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

无线WiFi安全渗透与攻防(一) 无线安全环境搭建以及密码生成

无线WiFi安全渗透与攻防 一. 无线安全环境搭建1.802.11标准(1).概念(2). 802.11标准和补充2.WiFi标准3.无线接入点AP(Access Point)1.概念2.AP的分类(1).胖AP(2).瘦AP(3).用途的区别4.客户端 STA5.无线局域网AP术语介绍6.无线网卡的工作模式(1).Managed Mode(2).…

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

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