Flask 是一种具有平缓学习曲线和庞大社区支持的微框架,利用它可以构建大规模的web应用。是搭建社区平台的神器之一。 利用它可以构建大规模的web应用。学习上手Flask非常轻松,但要深入理解却并不容易。本书从一个简单的Flask应用开始,通过解决若干实战中的问题,对一系列进阶的话题进行了探讨。书中使用MVC(模型-视图-控制器)架构对示例应用进行了转化重构,以演示如何正确地组织应用代码结构。有了可扩展性强的应用结构之后,接下来的章节使用Flask扩展为应用提供了额外的功能,包括用户登录和注册、NoSQL查询、REST API、一套后台管理界面,以及其他特性。然后,你会学到如何使用单元测试,保障代码持续按照正确的方式工作,避免极具风险的猜测式编程。 一个简单的Flask 项目入手,由浅入深地探讨了一系列实战问题,包括如何使用SQLAlchemy 和Jinja 等工具进行Web 开发;如何正确地设计扩展性强的Flask 应用架构和搭建MVC 环境;对于各种NoSQL 数据库的特性,何时应该、何时不应该及如何使用它们;通过使用Flask 扩展快速实现用户的身份系统、RESTful API、NoSQL查询、后台管理等功能;如何创建自己的扩展;使用Celery 编写异步任务,使用pytest 进行单元测试等;最后介绍了如何部署上线,包括使用自己搭建的服务器或使用各种云服务,以及如何权衡和选择这些不同的解决方案。
专注于为中小企业提供做网站、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业桃城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
你应该只是通过SAE验证了WEIXIN 的开发接口,如果你代码部署成功了,应该不会问这问题!目测你想表达的是,在SAE验证握手,POST数据从自己服务器返回!不过这太反人类了,排除。 只剩下一种可能,你只是验证了下,业务逻辑还没有,建议你先把业...
一、fliter_by(port=data)这样才对!!你定义model的时候明明是用的“port”来定义label,查询的时候当然也要用“port”
二、讲数据库操作了
创建表
首先,我们要让Flask-SQLAlchemy 根据模型类创建数据库。方法是使用db.create_all()
函数:
(venv) $ python hello.py shell
from hello import db
db.create_all()
插入行
下面这段代码创建了一些角色和用户:
from hello import Role, User
admin_role = Role(name='Admin')
mod_role = Role(name='Moderator')
user_role = Role(name='User')
user_john = User(username='john', role=admin_role)
#User类虽然没有role属性,但是在上一章节里面的Role里面设置了一个backref属性,就是用来反向作用的。
user_susan = User(username='susan', role=user_role)
#注意啊,这里的role=user_role针对的是上一章节里面说的,对应的是模型对象!不是键的值!!!
user_david = User(username='david', role=user_role)
模型的构造函数接受的参数是使用关键字参数指定的模型属性初始值。注意,role
属性也可使用,虽然它不是真正的数据库列,但却是一对多关系的高级表示。这些新建对象的id属性并没有明确设定,因为主键是由Flask-SQLAlchemy
管理的。现在这些对象只存在于Python 中,还未写入数据库。因此id 尚未赋值:
print(admin_role.id)
None
print(mod_role.id)
None
print(user_role.id)
None
通过数据库会话管理对数据库所做的改动,在Flask-SQLAlchemy
中,会话由db.session表示。准备把对象写入数据库之前,先要将其添加到会话中:
db.session.add(admin_role)
db.session.add(mod_role)
db.session.add(user_role)
db.session.add(user_john)
db.session.add(user_susan)
db.session.add(user_david)
或者简写成
db.session.add_all([admin_role, mod_role, user_role,
... user_john, user_susan, user_david])
这里的session首先是和前面章节讲的HTTP里面的session不一样的
不过我感觉作用是类似的,相当于一个缓存的作用,把实例化生成的对象存放在session里面
最后通过commit命令执行保存在数据库内。
db.session.commit()
接着,再去查看属性,已经有了
print(admin_role.id)
1
print(mod_role.id)
2
print(user_role.id)
3
修改行
在数据库会话上调用add() 方法也能更新模型。我们继续在之前的shell 会话中进行操作,下面这个例子把"Admin"
角色重命名为"Administrator":
admin_role.name = 'Administrator'
db.session.add(admin_role)
db.session.commit()
删除行
数据库会话还有个delete() 方法。下面这个例子把"Moderator" 角色从数据库中删除:
db.session.delete(mod_role)
db.session.commit()
查询行
Flask-SQLAlchemy 为每个模型类都提供了query 对象。最基本的模型查询是取回对应表中
的所有记录:
Role.query.all()
[, ]
User.query.all()
[, , ]
使用过滤器可以配置query 对象进行更精确的数据库查询。下面这个例子查找角色为"User" 的所有用户:
User.query.filter_by(role=user_role).all()
[, ]
filter_by()等过滤器在query 对象上调用,返回一个更精确的query 对象。多个过滤器可以一起调用,直到获得所需结果。
关系和查询的处理方式类似。下面这个例子分别从关系的两端查询角色和用户之间的一对多关系:
users = user_role.users
users
[, ]
users[0].role
这个例子中的user_role.users 查询有个小问题。执行user_role.users 表达式时,隐含的查询会调用all()
返回一个用户列表。query 对象是隐藏的,因此无法指定更精确的查询
过滤器。就这个特定示例而言,返回一个按照字母顺序排序的用户列表可能更好。在示例5-4 中,我们修改了关系的设置,加入了lazy = 'dynamic'
参数,从而禁止自动执行查询。
示例5-4 hello.py:动态关系
class Role(db.Model):
# ...
users = db.relationship('User', backref='role', lazy='dynamic')
# ...
这样配置关系之后,user_role.users 会返回一个尚未执行的查询,因此可以在其上添加过
滤器:
user_role.users.order_by(User.username).all()
[, ]
user_role.users.count()
2
我的理解是,通过添加lazy参数后,他生成的对象就是不直接显示内容,而是要通过过滤器才能显示的。
(1)Flask
Flask确实很“轻”,不愧是Micro Framework,从Django转向Flask的开发者一定会如此感慨,除非二者均为深入使用过
Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库
入门简单,即便没有多少web开发经验,也能很快做出网站
非常适用于小型网站
非常适用于开发web服务的API
开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验
各方面性能均等于或优于Django
Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方库
Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一
Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django
Flask比Django更加Pythonic,与Python的philosophy更加吻合
(2)Django
Django太重了,除了web框架,自带ORM和模板引擎,灵活和自由度不够高
Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉
Django的自带ORM非常优秀,综合评价略高于SQLAlchemy
Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja
Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDB等NoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁江山
Django目前支持Jinja等非官方模板引擎
Django自带的数据库管理app好评如潮
Django非常适合企业级网站的开发:快速、靠谱、稳定
Django成熟、稳定、完善,但相比于Flask,Django的整体生态相对封闭
Django是Python web框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找到与之对应的移植
Django上手也比较容易,开发文档详细、完善,相关资料丰富
计算机存储的信息都是按照二进制存的,之所以有各种进制只是输出形式的不同。
这个访问权限的控制,是用一位来表示一种权限,在进行某种操作时,如何判断该用户是否能够进行该操作,是通过在每次操作前执行权限判断,就是将该操作的权限code,与访问者角色的权限code两者相与,如何非零,则表示可以进行该操作,进而继续执行。否则,终止执行,抛出Permission deny。
除了这种基于二进制的权限实现方法,还可以将权限信息写到数据库中,不过原理基本一致。