Python FLASK学习笔记

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')获取用户信息。
  • 请求上下文:保存了客户端和服务器交互的数据
  • 应用上下文: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

flask-sqlalchemy用法详解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值