1、在使用 Flask 给客户端返回 JSON 数据时,可以直接使用 jsonify 生成一个 JSON 的响应;
@app.route('/demo')
def demo():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
注:不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json
2、重定向
- 直接填写自己 url 路径
- 使用 url_for 生成指定视图函数所对应的 url
@app.route('/demo1')
def demo1():
return 'demo1'
# 重定向,采用url_for生成demo1对应的url
@app.route('/demo2')
def demo2():
return redirect(url_for('demo1'))
3、flask上下文参数
(1)请求上下文(request context)
请求上下文对象有:request、session
-
- request
- 封装了HTTP请求的内容,针对的是http请求。举例:user = request.args.get('user'),获取的是get请求的参数。
- session
- 用来记录请求会话中的信息,针对的是用户信息。举例:session['name'] = user.id,可以记录用户信息。还可以通过session.get('name')获取用户信息。
- request
- 请求上下文:保存了客户端和服务器交互的数据
- 应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等
Cookie使用
Cookie:指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)。
- 复数形式Cookies。
- Cookie是由服务器端生成,发送给客户端浏览器,浏览器会将Cookie的key/value保存,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
- Cookie的key/value可以由服务器端自己定义。
4、数据库操作
SQLAlchemy是python中最著名的ORM(Object Relationship Mapping)框架:
https://www.cnblogs.com/wj-1314/p/10627828.html
https://www.cnblogs.com/zhaoyunlong/p/10368654.html
https://blog.csdn.net/weixin_45621944/article/details/110094386
主要思路:
(1)配置数据库信息、获取连接
(2)编写数据库表对应的类
(3)对象进行操作,实现对数据库的操作
主要代码:
数据库配置和连接:
app = Flask(__name__)
#在app中配置数据库连接信息
app.config["SQLALCHEMY_DATABASE_URI"] = 'mysql+mysqlconnector://root:123456@localhost:3306/test'
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
#连接数据库
db = SQLAlchemy(app)
查询:
User.query.filter() #返回所有
User.query.filter(User.age>20) #查询年龄大于20的数据
User.query.filter(User.age>20,User.age<40) #查询年龄大于20的数据 and 小于40
filter_by 只支持参数为关键字参数:类名.query.filter_by(属性名=值...)
data = User.query.filter_by(id=2)
data = User.query.filter_by(id>2) #错误写法 不可以使用模糊查到
data = User.query.filter_by(id=2,age=27)
all() 查询所有
filter_by / filter 单个查询
filter_by 不需要指定是哪个类的哪个属性,只需要制定属性及其目标值就可以了, 并且只能写具体的值不能写模糊值
filter filter中指定查询条件的时候需要指定类名的前缀。可以指定模糊值
User.query.get(2) 获取id对应的数据
order_by 排序:默认升序
data = User.query.order_by(User.age) #升序
data = User.query.order_by(-User.age) #降序
limit
User.query.filter(User.age>30).limit(2) 查到的结果只取两个
查询结果处理:
一般查询结果为单个类的实例或者列表,列表中装了类的实例。比如:
data = PY_USER.query.order_by(-PY_USER.id)
for d in data:
print("name:" + d.name)
5、gunicorn:
只要让flask应用实现高并发:参数work_class 不设置默认是sync同步的,设置成gevent 就是用异步,使用gevent,可以获得极高的并发性能,但gevent只能在Unix/Linux下运行,在Windows下不保证正常安装和运行。 windows下要支持并发 用Apache。更多参考文章:https://www.jianshu.com/p/69e75fc3e08e