Flask
文章平均质量分 65
从flask基础到项目实战
敲代码敲到头发茂密
欲戴王冠,必承其重
展开
-
Flask——接口路由技术
Flask 是一个轻量级的 web 开发框架。它依赖 jinja2 和 Werkzeug WSGI 服务的一个微型框架。通过装饰器 @app.route添加路由#2、创建flask应用程序的实例;#添加路由#启动入口#flask服务启动起来#轮询等待的方式,等待浏览器发来请求#会一直接收请求,直到程序停止app.run()flask-restx 是一个支持 RESTFUL 的 flask 插件,用于规范化接口的编写,并且支持 swagger 文档。原创 2023-11-01 20:32:53 · 1095 阅读 · 2 评论 -
关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题
我的报错截图:没有找到shop模块原因:shop模块在当前项目flask_p下,当前项目flask_p不在path环境变量中我的python项目目录结构:main.py文件解决方法:import osimport syspath=os.path.dirname(sys.path[0]) #得到当前项目所在目录的绝对路径print(path) #D:\flask_project\flask_pprint(sys.path)if path and path not in原创 2022-03-14 07:00:00 · 1441 阅读 · 0 评论 -
【Flask】ORM高级操作之懒加载
在一对多,或者多对多关系的时候,如果想要获取多的一方这一部分的数据的时候,往往能通过一个属性就可以全部获取了。如有一个部门,想要这个部门下的所有员工,通过user.emp就可以获取所有的。但有时候我们不想获取所有的数据,如只想获取范围更小的数据,那么这时候我们可以给relationship方法添加属性lazy=‘dynamic’,以后通过user.emp获取到的就不是一个列表,而是一个AppenderQuery对象了。这样就可以对这个对象再进行一层过滤和排序等操作。一、数据准备:配置数据库、创建数据库原创 2022-03-13 08:11:09 · 719 阅读 · 0 评论 -
【Flask】sqlalchemy高级用法(注意join的用法)
外键以及relationship首先创建模型类,根据模型类创建数据库,在这里一个user对应多个email_address,因此需要在address上增加一个user_id这个外键(一对多关系)class User(Base): __tablename__='t_user' id = Column(Integer, primary_key=True) name = Column(String(32)) address=relationship('Address',backup=back原创 2022-03-12 11:31:16 · 3239 阅读 · 0 评论 -
【Flask】SQLALchemy的介绍
SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架。SQLAlchemy对象关系映射器提供了一种方法,用于将用户定义的Python类与数据库表相关联,并将这些类(对象)的实例与其对应表中的行相关联。它包括一个透明地同步对象及其相关行之间状态的所有变化的系统,称为工作单元,以及根据用户定义的类及其定义的彼此之间的关系表达数据库查询的系统。可以让我们使用类和对象的方式操作数据库,从而从繁琐的 sql 语句中解脱出来。ORM 就是 Object Relational Mapper原创 2022-03-11 16:24:59 · 489 阅读 · 0 评论 -
【Flask】ORM高级操作之分组、过滤和子查询
一、数据准备:配置数据库、创建数据库引擎、创建基类、创建sessionfrom sqlalchemy import create_engine, Column, Integer, ForeignKey, String, TEXT, Boolean, DATE, DECIMALfrom sqlalchemy.ext.declarative import declarative_basefrom datetime import datefrom sqlalchemy.orm import session原创 2022-03-10 10:11:35 · 1905 阅读 · 0 评论 -
【Flask】自定义转换器
Flask中提供的转换器DEFAULT_CONVERTERS = { 'default': UnicodeConverter, 'string': UnicodeConverter, 'any': AnyConverter, 'path': PathConverter, 'int': IntegerConverter,原创 2022-03-04 07:00:00 · 785 阅读 · 1 评论 -
关于报错ImportError: cannot import name ‘AbstractKeyedTuple‘ from ‘sqlalchemy.util._collections‘的解决
导入:from sqlalchemy.util._collections import AbstractKeyedTuple报错信息:ImportError: cannot import name ‘AbstractKeyedTuple’ from ‘sqlalchemy.util._collections’解决:更换SQLALchemy版本pip install SQLALchemy==1.3.23原创 2022-03-03 07:00:00 · 815 阅读 · 1 评论 -
关于AttributeError:‘Flask‘ object has no attribute ‘ensure_sync‘的报错解决
原因:Flask-Limiter的版本高了,将Flask-Limiter的版本降低到1.4版本即可,pip install Flask-Limiter==104原创 2022-02-28 07:55:15 · 1325 阅读 · 2 评论 -
【Flask】ORM高级操作之排序和分页操作
一、数据准备from sqlalchemy import create_engine, Column, Integer, ForeignKey, String, TEXT, Boolean, DATE, DECIMALfrom sqlalchemy import Tablefrom sqlalchemy.ext.declarative import declarative_basefrom datetime import datefrom sqlalchemy.orm import session原创 2022-02-25 08:09:44 · 1119 阅读 · 0 评论 -
【Flask】数据的CRUD操作之聚合函数
func.count:统计行的数量。func.avg:求平均值。func.max:求最大值。func.min:求最小值。func.sum:求和。案例:#查询t_person表中一共多少条数据num=session.query(func.count(Person.id)).first()print(num)#查询t_person表中年领最大的人物信息num1=session.query(func.max(Person.age)).first()print(num1)#查询t_perso原创 2022-02-24 07:57:06 · 374 阅读 · 0 评论 -
【Flask】Request和RequestParser类
1、RequestParser类Flask-RESTful 提供了RequestParser类,用来帮助我们检验和转换请求数据。使用步骤:1.创建RequestParser对象2. 向RequestParser对象中添加需要检验或转换的参数声明3. 使用parse_args()方法启动检验处理4. 检验之后从检验结果中获取参数时可按照字典操作或对象属性操作代码块:2、参数说明1、required:描述请求是否一定要携带对应参数,默认值为FalseTrue 强制要求携带;若未携带,则校验原创 2022-02-23 08:05:01 · 1602 阅读 · 0 评论 -
【Flask】ORM多对多关联关系
1.多对多的关系需要通过一张中间表来绑定他们之间的关系。2. 先把两个需要做多对多的模型定义出来3. 使用Table定义一个中间表,中间表一般就是包含两个模型的外键字段就可以了,并且让他们两个来作为一个“复合主键”。4. 在两个需要做多对多的模型中随便选择一个模型,定义一个relationship属性,来绑定三者之间的关系,在使用relationship的时候,需要传入一个secondary=中间表对象名数据库的配置变量、创建数据库引擎、创建模型类基类、创建session对象from sqlalc原创 2022-02-22 08:00:38 · 499 阅读 · 0 评论 -
Flask-SQLAlchemy和alembic结合(步骤)
在之前的数据库操作中,我们新增一个字段是不是每次都得删除数据库表,然后再重新将新创建的数据库表映射到数据库中。这样操作是不是很蛋疼?是吧?于是sqlalchemy作者拜尔为了解决这一问题,开发了alembic这一迁移工具。步骤一:安装alembicpip install alembic步骤二:配置好数据库连接文件 如config.py...原创 2022-02-21 07:49:45 · 764 阅读 · 0 评论 -
【Flask】RESTful的响应处理
1、序列化数据Flask-RESTful 提供了marshal工具,用来帮助我们将数据序列化为特定格式的字典数据,以便作为视图的返回值。使用装饰器的方式from flask import Flaskfrom flask_restful import Resource,Api,marshal_with,marshal,fieldsapp=Flask(__name__)#步骤一:创建restful的apiapi=Api(app)# 用来模拟要返回的数据对象的类class User(obj原创 2022-02-18 06:43:16 · 787 阅读 · 0 评论 -
【Flask】Flask-RESTful 风格编程
一、RESTful定义RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景。RESTFUL特点包括:1、每一个URI代表1种资源;2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;3、通过操作资源的表现形式来操作资源;4、资源原创 2022-02-18 06:42:39 · 936 阅读 · 0 评论 -
【Flask】Flask-SQLAlchemy的使用
Flask-SQLAlchemy的使用是对SQLAlchemy进行了封装和优化:Flask-SQLAlchemy是Flask框架的一个插件Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装的一个插件使得我们在Flask中使用sqlalchemy更加的简单。1、安装:pip install flask-sqlalchemy2.Flask-SQLAlchemy的使用要点:2.1 数据库连接数据库初始化不再是通过create_engine。跟sqlalchemy原创 2022-02-17 07:00:00 · 2091 阅读 · 0 评论 -
关于ImportError: cannot import name ‘MigrateCommand‘ from ‘flask_migrate‘解决
通过执行命令创建数据库的表#通过执行命令创建数据库的表from flask_migrate import Migrate,MigrateCommandfrom flask_script import Managerfrom Shopping import create_appfrom comment.models import db#初始化appapp=create_app('develop')manager=Manager(app)Migrate(app,db)manager.ad原创 2022-02-17 07:00:00 · 5180 阅读 · 0 评论 -
【Flask】数据的CRUD之更新和删除操作
前提:需要生成数据表下面的第一步到第六步是生成数据表的操作步骤第一步:数据库配置# 数据库的配置变量HOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'test'USERNAME = 'root'PASSWORD = 'root'DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)第二步原创 2022-02-16 06:55:16 · 894 阅读 · 0 评论 -
关于“ModuleNotFoundError: No module named ‘flask._compat‘”的解决
在一个在flask项目中,新建一个新的hello.py,其中的hello功能函数我们希望通过命令来运行。from flask_script import Managerfrom Shopping import create_appmanager=Manager(app)@manager.commanddef hello(): print('命令执行成功')if __name__ == '__main__': manager.run()执行命令:python test_c原创 2022-02-16 06:54:51 · 15495 阅读 · 17 评论 -
【Flask】ORM一对一关联关系
在sqlalchemy中,如果想要将两个模型映射成一对一的关系,那么应该在父模型中,指定引用的时候,要传递一个uselist=False这个参数进去。就是告诉父模型,以后引用这个从模型的时候,不再是一个列表了,而是一个对象了。方法一:参照一对多关联,把uselist=false,加在没有外键的对象中,其他的和前面一对多关联是一样的from sqlalchemy import create_engine, Column, Integer, ForeignKey, String, TEXT, Boolean原创 2022-02-15 06:38:25 · 632 阅读 · 0 评论 -
【Flask】ORM一对多关联关系
SQLAlchemy提供了一个relationship,这个类可以定义属性,以后在访问相关联的表的时候就直接可以通过属性访问的方式就可以访问得到了。另外,可以通过backref来指定反向访问的属性名称。配置数据库、创建数据库引擎、创建基类#配置数据库HOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'test'USERNAME = 'root'PASSWORD = 'root'DB_URI = 'mysql+pymysql://{}:{}@{}:{}原创 2022-02-14 06:52:23 · 452 阅读 · 0 评论 -
【Flask】数据的CRUD之增加和查询操作
用session做数据的增删改查操作:1、创建模型类,生成数据表#第一步:创建基类Base=declarative_base(engine)#第二步:定义python类和表的映射class Person(Base): __tablename__='t_person' #创建表名,最好是t_开头 id=Column(name='id',type_=Integer,primary_key=True,autoincrement=True) name=Column(name='原创 2022-02-13 10:02:21 · 824 阅读 · 0 评论 -
【Flask】创建一个蓝图
蓝图在一个Flask 应用项目中,如果业务视图过多,可否将以某种方式划分出的业务单元单独维护,将每个单元用到的视图、静态文件、模板文件等独立分开?例如从业务角度上,可将整个应用划分为用户模块单元、商品模块单元、订单模块单元,如何分别开发这些不同单元,并最终整合到一个项目应用中?一、蓝图介绍在Flask中,使用蓝图Blueprint来分模块组织管理。蓝图实际可以理解为是一个存储一组视图方法的容器对象,其具有如下特点:一个应用可以具有多个Blueprint可以将一个Blueprint注册到任何一原创 2022-02-12 11:20:15 · 2259 阅读 · 0 评论 -
【Flask】ORM的关联关系
1、表的外键关联使用SQLAlchemy创建外键非常简单。在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了。从表中外键的字段,必须和主表的主键字段类型保持一致。特别注意1:这种关联只关注数据表之间的外键关联,不考虑Python对象之间的关联关系.前提需要连接数据库、创建数据库引擎、创建基类、创建sessionfrom sqlalchemy import create_engine, Column, Integer, ForeignKey, String, TEXT, Boolean原创 2022-02-11 06:48:39 · 508 阅读 · 0 评论 -
【Flask】flask上下文
上下文:即语境,语意,在程序中可以理解为在代码执行到某一时刻时,根据之前代码所做的操作以及下文即将要执行的逻辑,可以决定在当前时刻下可以使用到的变量,或者可以完成的事情。Flask中有两种上下文,请求上下文和应用上下文Flask中上下文对象:相当于一个容器,保存了 Flask 程序运行过程中的一些信息。一、请求上下文思考:在视图函数中,如何取到当前请求的相关数据?比如:请求地址,请求方式,cookie等等在 flask 中,可以直接在视图函数中使用 request 这个对象进行获取相关数据,而 r原创 2022-02-11 06:47:28 · 778 阅读 · 2 评论 -
【Flask】创建ORM映射以及参数解释
创建一个类,一个类对应了一个数据库中的一张表,类的数据属性对应了表中的字段名,这个类称为映射类。一、主动创建映射使用Declarative系统映射的类是根据基类定义的,换句话说每个映射类需要继承这个基类。我们使用declarative_base() 函数可以创建这个基类,如下所示:第一步:创建基类(所有ORM中的O,对象模型的超级父类)from sqlalchemy.ext.declarative import declarative_base#创建数据库引擎engine=create_e原创 2022-02-10 08:33:57 · 1632 阅读 · 0 评论 -
【Flask】Jinja2之模板继承
一般我们的网站虽然页面多,但是很多部分是重用的,比如页首,页脚,导航栏之类的。对于每个页面,都要写这些代码,很麻烦。Flask的Jinja2模板支持模板继承功能,省去了这些重复代码。块和继承案例父模板<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>父模板</title></head><body>原创 2022-02-09 07:05:29 · 1046 阅读 · 0 评论 -
关于sqlalchemy.exc.DataError: (pymysql.err.DataError) (1264, “Out of range value for column问题的解决
报错结果为:sqlalchemy.exc.DataError: (pymysql.err.DataError) (1264, “Out of range value for column ‘sal’ at row 1”)的原因是,所传参数产出规定的范围如下代码创建模型类class Person(Base): __tablename__='t_person' id=Column(name='id',type_=Integer,primary_key=True,autoincrement=原创 2022-02-09 07:04:54 · 2519 阅读 · 0 评论 -
【Flask】项目中使用请求钩子的妙处有那些?
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在请求开始时,建立数据库连接;在请求开始时,根据需求进行权限校验;在请求结束时,指定数据的交互格式;为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:1、before_first_request在处理第一个请求前执行,可以在此方法内部做一些初始化操作2、before_request在每一次请求之前调用,这时候已经有请求了原创 2022-02-08 07:27:21 · 191 阅读 · 0 评论 -
【Flask】Jinja2模板的使用及控制语句
Jinja2模板在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单请求.实际上,视图函数有两个作用:处理业务逻辑返回响应内容在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取使用真实值替换变量,再返回最终得到的字符串,这个过程称为’渲染’Flask是使用Jinja2这个模板引擎来渲染模板使用模板的好处视图函数只负责业务逻辑和数据处理(原创 2022-02-08 07:23:14 · 686 阅读 · 0 评论 -
【Flask】Jinja2之测试器的应用
测试器总是返回一个布尔值,它可以用来测试一个变量或者表达式,使用”is”关键字来进行测试。测试器本质上也是一个函数,它的第一个参数就是待测试的变量,在模板中使用时可以省略去。如果它有第二个参数,模板中就必须传进去。测试器函数返回的必须是一个布尔值,这样才可以用来给if语句作判断。1、Jinja2中内置的测试器模板文件<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">原创 2022-02-07 07:00:16 · 475 阅读 · 0 评论 -
【Flask】Jinja2之模板中使用url_for
模版中的url_for跟我们后台视图函数中的url_for使用起来基本是一模一样的。也是传递视图函数的名字,也可以传递参数。使用的时候,需要在url_for左右两边加上一个{{ url_for(‘func’) }}视图:from flask import Flask,render_template#todo 初始化Flask项目的服务app = Flask(__name__)@app.route('/')def hello_world(): return render_templa原创 2022-02-07 06:59:27 · 1135 阅读 · 0 评论 -
【Flask】Jinja2模板之过滤器
一、过滤器定义实质上就是一个转换函数。变量可以通过“过滤器”进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。常用的过滤器有:1、字符串过滤器视图函数from flask import Flask, render_template# todo 初始化Flask项目的服务app = Flask(__name__)student = {'name': 'kobe', 'age': 14, 'gender': '男'}@app.route('/str')def t原创 2022-02-06 09:44:59 · 1473 阅读 · 0 评论 -
【Flask】response响应
1、重定向from flask import Flask,redirect,jsonify,make_response,render_template#static_url_path:相当于路由app = Flask(__name__) #初始化Flask项目的服务@app.route('/')def hello_world(): return 'Hello World!'@app.route('/demo1')def demo1(): return redire.原创 2022-02-05 10:02:52 · 1189 阅读 · 0 评论 -
【Flask】request请求
在Flask中,可以定义路由默认的请求方式:利用methods参数可以自己指定一个接口的请求方式一、get请求get方式:把请求参数放到为url的?后面,每个请求参数格式为:参数名=参数值。参数之间采用&符号隔开。采用的字符数据传输,所以也叫明文的请求post: 表单提交,并且采用字节流的方式传递数据案例:模板中的html文件<!DOCTYPE html><html lang="en"><head> <meta charset="原创 2022-02-04 10:28:11 · 2931 阅读 · 1 评论 -
【Flask】路由和URL
一、路由@app.route('/index') #路由def view_function(): #视图函数 return "hello kobe" #响应在程序中获取路由信息在应用中的url_map属性中保存着整个Flask应用的路由映射信息,可以通过读取这个属性获取路由信息print(app.url_map)如果想在程序中遍历路由信息,可以采用如下方式for rule in app.url_map.iter_rules(): print('name={} path={原创 2022-02-03 10:57:35 · 1502 阅读 · 0 评论 -
【Flask】url_for函数
一般我们通过一个 URL 就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个 URL 呢? url_for 函数就可以帮我们实现这个功能。url_for() :主要目的是:为了按照路由列表生成一个动态的url地址比如:@app.route('/')def hello_world(): #url_for的主要目的是:为了按照路由列表生成一个动态的url地址 return redirect(url_for('phone_number',mob_num='15211111原创 2022-02-02 07:09:39 · 2152 阅读 · 0 评论 -
【Flask】flask相关的参数的解释
一、Flask参数说明接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数创建flask项目后,默认app.py文件如下:1、import_name参数Flask类传递的参数有如下那么多,其中import_name是必传参数import_name:Flask程序所在的包(模块),传 name 就可以 ,其可以决定 Flask 在访问静态文件时查找的路径,这里指app.py2、static_url_path参数static_url_path:静态文件访问路径,可以不传原创 2022-01-30 06:46:23 · 4439 阅读 · 0 评论 -
【Flask】flask入门以及第一个flask项目的创建
一、Flask介绍Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。1、为什么要学原创 2022-01-29 06:34:30 · 1336 阅读 · 0 评论