蓝图Blueprint
什么是蓝图?
蓝图:用于实现单个应用的视图、模板、静态文件的集合。
蓝图就是模块化处理的类。
简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。
蓝图的使用:
一、创建蓝图对象。
#Blueprint必须指定两个参数,admin表示蓝图的名称,__name__表示蓝图所在模块
admin = Blueprint('admin',__name__)
二、注册蓝图路由。
@admin.route('/')
def admin_index():
return 'admin_index'
三、在程序实例中注册该蓝图。
#url_prefix是指在定义视图函数url前面加上/admin才能访问该视图函数
app.register_blueprint(admin,url_prefix='/admin')
SQLAlchemy
db.session api 接口地址:
https://docs.sqlalchemy.org/en/13/orm/session_api.html
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果
Engine,框架的引擎
Connection Pooling ,数据库连接池 Dialect,选择连接数据库的DB API种类
Schema/Types,架构和类型
SQL Exprression Language,SQL表达式语言
ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。
create_engine()
用来初始化数据库连接。SQLAlchemy用一个字符串表示连接信息:
'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
FLASK --DB-COLUMN属性
db.Column 中其余的参数指定属性的配置选项
。
选项名 | 说 明 |
---|---|
primary_key | 如果设为 True,这列就是表的主键 |
unique | 如果设为 True,这列不允许出现重复的值 |
index | 如果设为 True,为这列创建索引,提升查询效率 |
nullable | 如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值 |
default | 为这列定义默认值 |
flask_SQLAlchemy扩展包:封装了对数据库的操作,离开了这个扩展包,就不会碰见session
flask-sqlalchemy filter 和 filter_by 的区别
filter用类名.属性名,比较用==,filter_by直接用属性名,比较用= 不过这个是语法小细节。
个人觉得最重要的区别是filter不支持组合查询,只能连续调用filter来变相实现。
而filter_by的参数是**kwargs,直接支持组合查询。
filter和filter_by查询:都是查询过滤器,要使用查询执行器;
User.query.filter(User.name=='wang').all() 参数:必须使用类名.字段,可以使用运算符>= == <= !=
User.query.filter_by(name='wang').all()参数:只需要使用字段名,不能使用运算符。
filter_by()
方法,对查询结果过滤,参数必须是键值对”key=value”
# WHERE name='Tom'
users = User.query.filter_by(name='Tom')
# WHERE name='Tom' AND age=17
users = User.query.filter_by(name='Jane', age=17)
filter()
方法,对查询结果过滤,比filter_by()
方法更强大,参数是布尔表达式
# WHERE age<20
users = User.query.filter(User.age<20)
# WHERE name LIKE 'J%' AND age<20
users = User.query.filter(User.name.startswith('J'), User.age<20)
多个查询条件用逗号分割。
first()
方法,取返回列表中的第一个元素,当我们只查询一条记录时非常有用
user = User.query.filter_by(name='Michael').first()
order_by()
方法,排序
from sqlalchemy import desc
# ORDER BY name
user = User.query.order_by(User.name)
# ORDER BY age DESC, name
user = User.query.order_by(desc(User.age), User.name)
request模块
1、method:请求的方法,return request.method #POST
2、form:返回form的内容return json.dumps(request.form) #返回值:{"username": "123", "password": "1234"}
3、args和values:args返回请求中的参数,values返回请求中的参数和formreturn json.dumps(request.args) # 返回值:{"a": "1", "b": "2"}
return str(request.values) #返回值:CombinedMultiDict([ImmutableMultiDict([('a', '1'), ('b', '2')]), ImmutableMultiDict([('username', '123'), ('password', '1234')])])
4、cookies:cookies信息return json.dumps(request.cookies) #cookies信息
5、headers:请求headers信息,返回的结果是个listreturn str(request.headers) #headers信息
request.headers.get('User-Agent') #获取User-Agent信息
6、url、path、script_root、base_url、url_root:看结果比较直观return 'url: %s' %request.url 返回值:url: http://192.168.1.183:5000/testrequest?a&b
return 'script_root: %s' %request.script_root 返回值:script_root: ,
return 'path: %s' %request.path 返回值:path: /testrequest
return 'base_url: %s' %request.base_url 返回值:base_url: http://192.168.1.183:5000/testrequest
return 'url_root : %s' %request.url_root 返回值:url_root : http://192.168.1.183:5000/
7、date、files:date是请求的数据,files随请求上传的文件