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方法中的闭包函数 view
	3 view()--->执行self.dispatch_request()---》执行MethodView的dispatch_request
	def dispatch_request(self, **kwargs):
	    meth = getattr(self, request.method.lower(), None)
	    return meth(**kwargs)
	4 如果是get请求,就会执行视图类中的get方法
	
	class View:
	    @classmethod
	    def 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')  它就是 view
	    
	3 _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) # 装饰器语法糖干的事: 把被装饰的函数当参数传入到装饰器,返回结果赋值给被装饰的函数,一个个用装饰器包装view
        view.__name__ = name
        return 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  delete
    app.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 写入session
    session['username']='xxx'
    3 取出session
    username = 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 = 3306
    MYSQL_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 改代码---》密码不判断


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

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

相关文章

【java学习—十五】线程的生命周期(4)

文章目录 线程的生命周期1. 相关概念 线程的生命周期 1. 相关概念 线程的生命周期&#xff1a;线程从生到死的整个经历。 JDK 中用 Thread.State 枚举表示了线程的几种状态 要想实现多线程&#xff0c;必须在主线程中创建新的线程对象。 Java 语言使用 Thread 类及其子类的…

UnitTest + Selenium 完成在线加法器自动化测试

1. 任务概述 利用 UnitTest 与 Selenium 编写自动化用例&#xff0c;测试在线加法器中的整数单次加法功能【如123 】 人工操作流程&#xff08;测试 12 是否等于 3&#xff09;&#xff1a; 打开在线加法器点击按钮1&#xff0c;再点击按钮&#xff0c;再点击按钮2&#xff0c…

adb手机调试常用命令

查看手机型号 adb shell getprop ro.product.model 查看电池状况 adb shell dumpsys battery 查看分辨率 adb shell wm size 查看屏幕密度 adb shell wm density 查看显示屏参数 adb shell dumpsys window displays 查看android_id adb shell settings get secure android…

安科瑞为数据中心绿色高质量发展贡献力量

安科瑞 崔丽洁  0前言 目前&#xff0c;数字经济的迅猛发展激发了数据中心的算力需求&#xff0c;数据中心规模与功耗密度不断提高&#xff0c;能耗问题日益突出。短期内&#xff0c;数据中心的能耗、碳排放量仍会呈现上升趋势。面对国家“双碳”压力&#xff0c;我国数据中心…

Active Directory 域服务基础知识

Active Directory 域服务&#xff08;AD DS&#xff09;是 Microsoft 提供的传统本地域服务&#xff0c;它是 Active Directory&#xff08;AD&#xff09;中的核心组件和服务器角色&#xff0c;Active Directory&#xff08;AD&#xff09;是 Windows 操作系统环境中的专用专有…

vue2项目修改编译巨慢

前言&#xff1a;我们的一个vue项目在给新同事后他说编译贼慢&#xff0c;一个小修改项5分钟才能自动编译成功&#xff0c;我把项目放到新电脑上也巨慢&#xff0c;升级了nodejs好使了一些&#xff0c;但还是慢&#xff0c;最后引入webpack后巨快&#xff0c; 在项目的package…

初识Java 18-1 泛型

目录 简单泛型 元组库 通过泛型实现栈类 泛型接口 泛型方法 可变参数和泛型方法 通用Supplier 简化元组的使用 使用Set创建实用工具 本笔记参考自&#xff1a; 《On Java 中文版》 继承的层次结构有时会带来过多的限制&#xff0c;例如&#xff1a;编写的方法或类往往…

前端学习笔记--React

1. 什么是React? React 是一个用于构建用户界面的JavaScript库核心专注于视图,目的实现组件化开发我们可以很直观的将一个复杂的页面分割成若干个独立组件,每个组件包含自己的逻辑和样式 再将这些独立组件组合完成一个复杂的页面。 这样既减少了逻辑复杂度&#xff0c;又实现…

12-1- GAN -简单网络-线性网络

功能 随机噪声→生成器→MINIST图像。 训练方法 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的训练,首先固定判别器参数不变,其次判别器应当将生成图像判别为1 loss…

你应该知道关于Python的这几个技巧!

随着大数据时代的到来&#xff0c;我们每天都在接触爬虫相关的事情&#xff0c;这其中就不得不提及Python这门编程语言。我已经使用Python编程有多年了&#xff0c;即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小…

MySQL覆盖索引的含义

覆盖索引&#xff1a;SQL只需要通过索引就可以返回查询所需要的数据&#xff0c;而不必通过二级索引查到主键之后再去查询数据&#xff0c;因为查询主键索引的 B 树的成本会比查询二级索引的 B 的成本大。 也就是说我select的列就是我的索引列&#xff08;或者主键&#xff0c;…

XD6500S— LoRa SIP模块

XD6500S是一系列LoRa SIP模块&#xff0c;集成了射频前端和LoRa射频收发器SX1262系列&#xff0c;支持LoRa和FSK调制。收发器SX1262系列&#xff0c;支持LoRa和FSK调制。LoRa技术是一种扩频协议&#xff0c;针对LPWAN 应用的低数据速率、超远距离和超低功耗通信进行了优化。通信…

KMP算法详讲(问题导向,通俗易懂)

KMP算法是一种高效的字符串匹配算法&#xff0c;相比于BF算法的时间复杂度为O(n*m)&#xff0c;它的时间复杂度降低到了O(nm)。这种算法的高效性在于它利用了主串的指针不回溯&#xff0c;而只移动模式串的指针位置。然而&#xff0c;对于初学者来说&#xff0c;KMP算法并不容易…

全面掌握:性能测试计划的制胜法宝

一&#xff0e;简介 简介部分就不用过多描述了&#xff0c;无非项目的背景&#xff0c;进行此次性能测试的原因&#xff0c;以及性能测试覆盖的范围等等&#xff0c;几乎所有项目文档都在开端对项目进行简单的阐述。 二&#xff0e;性能测试需求 寻找的被测试对象和压力点 …

windows 部署 weblogic 12.1.3

1、安装 1&#xff09;下载 地址&#xff1a;WebLogic Server 12c (12.2.1), WebLogic Server 11g (10.3.6) and Previous Releases 2&#xff09;安装 weblogic server java -Xmx1024m -jar fmw_12.1.3.0.0_wls.jar 出现图形界面按需配置&#xff0c;注意配置的安装路径不能…

11月编程榜最新出炉,第一名很离谱

这段时间&#xff0c;随着人工智能的崛起&#xff0c;Python的地位水涨船高。有不少朋友感觉到危机重重。 其中&#xff0c;最明显的&#xff0c;是市场环境的变化&#xff1a; 外部招聘&#xff1a;Python岗位日均需求量高达15000&#xff01;不仅是程序员&#xff0c;内容编…

【分享课】11月16日晚19:30PostgreSQL分享课:PG缓存管理器主题

PostsreSQL分享课分享主题: PG缓存管理器主题 直播分享平台&#xff1a;云贝教育视频号 时间&#xff1a;11月16日 周四晚 19: 30 分享内容: 缓冲区管理器结构 缓冲区管理器的工作原理 环形缓冲区 脏页的刷新

uniapp使用Canvas实现电子签名

来源&#xff1a; 公司的一个需求&#xff0c;需要给新注册的会员和客商需要增加签署协议功能&#xff1b; 之前的思路&#xff1a; 1、使用vue-signature-pad来实现电子签名&#xff0c;但是安卓手机不兼容&#xff1b; 2、uniapp插件市场来实现&#xff0c;但是对HBuilderX…

为什么小型企业应该拥抱数字化转型?

在当今飞速发展的商业环境中&#xff0c;数字化转型已经成为各种规模组织的必然选择。特别是小型企业&#xff0c;通过数字化转型&#xff0c;可以在保持竞争力、提高运营效率并开启新的增长机会方面获益匪浅。本文探讨了数字化转型的概念&#xff0c;强调了它对小型企业的重要…

测试小白必看:自动化测试入门基础知识

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…