4-flask-cbv源码、Jinja2模板、请求响应、flask中的session、flask项目参考

2023-11-20 13:01

本文主要是介绍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项目参考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394798

相关文章

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模