===sqlalchemy创建的数据模型中:
1 字段是属性   【模型中定义的字段是类属性,表单中定义的字段也是类字段】

2 若数据库不支持bool类型,则sqlalchemy会自动将bool转成0和1

3 若不显示指明表名,则表名为模型名的小写

4 sqlalchemy默认的__init__会将定义的类属性作为__init__的关键字参数

===查询语句:User是名,不是实例名

1 User.query.all()

2 User.query.limit(10).all()

3 User.query.order_by(User.age).all()

3 User.query.order_by(User.age.desc()).all()

3 User.query.first()

3 通过主键获取一行数据:User.query.get()

3 过滤:filter 和filter_by,但filter_by只能查找确切值:User.query.filter_by(username='haha').all()    User.query.filter(User.username='haha').all()

filter 还支持 in_ or_ not_

db.session.query(func.count(Gift.id), Gift.isbn).filter(
Gift.launched == False,
Gift.isbn.in_(isbn_list),
Gift.status == 1).group_by(
Gift.isbn).all()

3 add、delete和update都要commit,查询不需要

delete 要先查询出再删

user = User.query.first()

db.session.delete(user)

db.session.commit()

增加记录:

user = User()
db.session.add(user)
db.session.commit()

===模型关系

一对多时,外键在多的那一方

uid = Column(Integer, ForeignKey('user.id'), nullable=False) #user是表名,id是表中的字段

综上,ForeignKey里的是表名,relationship里的是类名

=====db.session.commit帮我们实现了事务

======Jinja模板中的变量可以是任意python对象,只要他能被python的str()方法转换成一个字符串

=======

{%if   %}  if里可以有过滤器

{% else %}

{% endif %}

======

{%for   a in b %}   循环内有个特殊 变量 loop,获取循环的一些信息,如迭代次数

{% endfor %}

=====for 和 if 嵌套

====

若url_for中的url带参数,可以通过关键字参数的形式传入url_for:url_for('web.book_detail', isbn=current_gift.isbn)

==============

jinja对Flask提供的特有支持:request、config、session、url_for 、get_flashed_messages()、g

=========Bootstrap是一些列CSS样式的集合

get_or_404  first_or_404

============

字段检查器都可以接受一个message参数,表示检测没通过时返回的信息

==========从flask_wtf中import的form才有validate_on_submit这个方法,从wtforms引入的form没有此方法

form.validate_on_submit() 会1)判断请求是否为post请求2)字段是否通过校验

===========

g对象保存每个特定请求的临时数据,是线程安全的,请求结束时,这个对象就销毁了

==========

通常abort和errorhandler一起用,abort返回一个http错误码,errorhandler处理这个错误码

errorhandler可以接收多个错误码

=========类视图函数的定义  MethodView

======

from flask_restful import reqparse
self.paser = reqparse.RequestParser() #参数解析器
self.paser.add_argument('wfids',required=True,location=['args','headers']) #从URL参数中或HTTP请求头中找出wfids变量
args = self.paser.parse_args()  #获取参数的解析结果
=========
在return语句中,若返回的是一个元组,第2个内容作为http状态码,还可以用字典作为第3个参数,表示响应头内容
=========

通过curl发送get请求:curl http://localhost:5000/api/post/1
发送post请求:curl -d "title=HAHA" -d "tag=python" http://localhost:5000/api/post

curl中使用-X来创建put请求 curl -X PUT -d "tile=haha" -d "token=***" http://localhost:5000/api/post/110

=========

对于api,为了进行身份认证,可以使用token,token通常都设过期时间,这样即使token被窃取了也只能用一段时间

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
def generate_token(self, expiration=): #生成token
s = Serializer(secret_key=current_app.config['SECRET_KEY'], expires_in=expiration)
return s.dumps({'id': self.id}).decode('utf-8')
#######解析token
def parse_token(token):
s = Serializer(secret_key=current_app.config['SECRET_KEY'])
try:
data = s.loads(token.encode('utf-8'))
except:
return False uid = data.get('id')

=========

sql 优势:支持事务(持久性、隔离性、原子性、一致性)
劣势:慢(postgre其实也不慢)、可扩展性差(不能把数据拆分到多个库,如A-H的存入一个库,I-P的存入一个库,因为join需要获取整张表的数据)

nosql:劣势:不支持事务
优势:快(不用调优就很快)、可扩展、无固定表结构

BJSON是二进制json,允许把json存为二级制格式,而不是字符串,这样能节省大量空间

=================

深入理解flask 笔记的更多相关文章

  1. flask笔记(三)Flask 添加登陆验证装饰器报错,及解析

    Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...

  2. Flask笔记1

    Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...

  3. 19.fastDFS集群理解+搭建笔记

    软件架构理解 1FastDFS介绍 1.1什么是FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并 ...

  4. flask笔记一

    最近学习flask,由于web开发方面接触的并不是很多,所以看官方文档有点焦头烂额,好多的概念不理解. <Flask web 开发>比较基础,先用这本书做个入门. 1.Flask实例化对象 ...

  5. Flask笔记:RESTful

    RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...

  6. Flask笔记:信号机制

    Flask中有内置的一些信号,也可以通过三方库blinker自定义信号,其实Flask内置的信号也是优先使用的blinker库,如果没有安装blinker才会使用自定义的信号机制.可以通过点击任意导入 ...

  7. Flask笔记:session

    session与cookie: cookie是一项浏览器的技术,而不是服务器的技术,服务器端是无法直接操作cookie的,只能通过返回Response响应告诉浏览器怎么操作cookie.而sessio ...

  8. Flask笔记(一)

    first_flask_project.py # 从flask这个包中导入Flask这个类 # Flask这个类是项目的核心,以后很多操作都是基于这个类的对象 # 注册url.注册蓝图等都是基于这个类 ...

  9. flask笔记3-模板

    flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...

随机推荐

  1. python json模块(15)

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...

  2. 整理通常的SQL SERVER优化流程

    1.SQL脚本或存储过程,跟踪存储过程的执行时长和reads,不正常的情况下,表明语句.存储过程有优化空间,通常是未加索引,或者索引的字段升降序进行调用: A:脚本是否需要新增或复用现有索引: B:脚 ...

  3. [转]综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解. _论文地址:htt ...

  4. idea常用的快捷键(黑马培训班)

    idea常用的快捷键 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Ins ...

  5. vue生成带logo的二维码

    输入命令行下载 npm install vue_qrcodes <template> <div> <qrcode :url="></qrcode&g ...

  6. LOJ3119 CTS2019 随机立方体 概率、容斥、二项式反演

    传送门 为了方便我们设\(N\)是\(N,M,L\)中的最小值,某一个位置\((x,y,z)\)所控制的位置为集合\(\{(a,b,c) \mid a = x \text{或} b = y \text ...

  7. VisualStudio 连接 MySql 实现增删查改

    首先创建数据库,建立一个用户登录表 2.visualStudio默认是不支持MySql的,要想通过Ado.Net 操作MySql 需要在管理NeGet包添加对MySql.Data  和 MySql.D ...

  8. 谈一谈重 ORM 和 轻 ORM + SQL 的一些经验

    ORM 的本质比较简单,就是对象关系映射 Object Relation Mapping 那很多人都经常会说的一个问题,EF 或 EF Core 好啊,方便啊,不用写麻烦的 SQL ,写 SQL 又要 ...

  9. Java开发环境搭建(一)

    一.JDK与JRE JDK:Java Development Kit,Java开发工具包,是给开发人员使用的,其中包含了Java的开发工具,如java.javac.jar等命令,同时也包含了JRE. ...

  10. 【洛谷 P3674】 小清新人渣的本愿(bitset,莫队)

    题目链接 因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护. \(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了 ...