flask接口开发快速上手

一、前言

为了让有django或其他python web框架开发经验的同学快速上手flask接口开发,所以有了写这篇文章的想法。本文不会讲理论知识,一切以实用、快速上手为主。

注意:文本只讲前后端分离的接口开发。

二、flask环境准备

1.pip install flask

Flask 是一个轻量级 Web 应用程序框架,用来写接口再合适不过了。

官网:https://flask.palletsprojects.com/en/1.1.x/

2.pip install flask-login

flask的登录鉴权操作一般都是用flask-login模块,我们就不必再造这个轮子了。

官网:https://flask-login.readthedocs.io/en/latest/

3.pip install flask-restful

flask-restful是用于快速构建restful api的框架,相当于django的drf。

官网:http://www.pythondoc.com/Flask-RESTful/index.html

4.pip install sqlalchemy

非常灵活强大的ORM框架

官网:https://www.sqlalchemy.org/

5.pip install flask-sqlalchemy

为了在flask中更方便的使用sqlalchemy,对其进行了轻量级封装

官网:https://flask-sqlalchemy.palletsprojects.com/en/2.x/

三、快速上手

1.HelloWorld

在项目中新建一个main.py,做为程序的入口

from flask import Flask
from flask_restful import Resource, Api

# 创建Flask应用
app = Flask(__name__)
# 使用flask_restful创建api对象,用于注册路由
api = Api(app)


# 编写类视图
class HelloWorldView(Resource):
    def get(self):
        return "HelloWorld"


# 注册路由
api.add_resource(HelloWorldView, r"/hello")

if __name__ == '__main__':
    app.run(port=8716, host='0.0.0.0')

2.接收参数

1.接收url中的参数,/hello?name=狡猾的皮球&age=24

from flask import Flask, request
from flask_restful import Resource, Api

# 创建Flask应用
app = Flask(__name__)
# 使用flask_restful创建api对象,用于注册路由
api = Api(app)


# 编写类视图
class HelloWorldView(Resource):
    def get(self):
        name = request.args.get("name")
        age = request.args.get("age")
        gender = request.args.get("gender", default="默认值")
        print(name, age, gender)
        return "HelloWorld"


# 注册路由
api.add_resource(HelloWorldView, r"/hello")

if __name__ == '__main__':
    app.run(port=8716, host='0.0.0.0')

运行结果:

2.接收post请求application/json类型的json参数:

# 其他代码略

class HelloWorldView(Resource):
    def get(self):
        # 代码略...

    def post(self):
        name = request.json.get("name")
        age = request.json.get("age")
        gender = request.json.get("gender")
        return f"Post请求接收的参数,name:{name},age:{age},gender:{gender}"

请求结果:

 

3.返回json类型给前端

 

class HelloWorldView(Resource):
    def get(self):
        # 代码略...

    def post(self):
        name = request.json.get("name")
        age = request.json.get("age")
        gender = request.json.get("gender")
        return {
            "code": 200,
            "msg": "请求成功",
            "data": {
                "name": name,
                "age": age,
                "gender": gender
            }
        }

请求结果:

4.配置文件的加载

使用 app.config.from_object("configs") ,flask会将同级目录下的configs.py文件当做配置文件。

配置文件的大致结构configs.py(具体配置项请看flask官方文档):

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# debug 模式
DEBUG = True
# 数据库
SQLALCHEMY_DATABASE_URI = ""
# 其他数据库
SQLALCHEMY_BINDS = ""
SQLALCHEMY_TRACK_MODIFICATIONS = True
# SQLALCHEMY_ECHO=True
# REDIS配置
REDIS_CFG = ""
# 接口不返回ascii
RESTFUL_JSON = dict(ensure_ascii=False)

在项目中引用配置,比如获取DEBUG的值:

app.config.get("DEBUG")

5.数据的增删改查(简单演示)

使用flask_sqlalchemy进行数据库操作,需要先做以下几件事情:

1.在配置文件configs.py中配置数据库的连接参数,例如:

SQLALCHEMY_DATABASE_URI="mysql://用户名:密码@127.0.0.1:3306/数据库名"

2.编写model类,假如现有student表:

# 编写model
class Student(db.Model):
    """
    学生表
    """
    __tablename__ = 'student'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text)  # 姓名
    gender = db.Column(db.Integer)  # 性别

查询所有学生:

if __name__ == '__main__':
    # 查询所有学生
    students = Student.query.all()
    for student in students:
        print(student.name)

运行结果:

李逍遥
赵灵儿
林月如
阿奴
王小虎
沈欺霜
苏媚

查询性别为女的学生名称:

    # 查询性别为女的学生
    students = Student.query.filter(Student.gender == "女")
    for student in students:
        print(student.name)

运行结果:

赵灵儿
林月如
阿奴
沈欺霜
苏媚

 

新增姓名为唐雪见的女性学生:

    # 新增唐雪见
    student = Student(name="唐雪见",gender="女")
    db.session.add(student)
    db.session.commit()

结果:

把唐雪见的性别修改为男:

    student = Student.query.filter(Student.name == "唐雪见").first()
    student.gender = "男"
    db.session.commit()

结果:

删除唐雪见:

    student = Student.query.filter(Student.name == "唐雪见").first()
    db.session.delete(student)
    db.session.commit()

 

完整代码:

from flask import Flask, request
from flask_restful import Resource, Api
from flask_sqlalchemy import SQLAlchemy

# 创建Flask应用
app = Flask(__name__)
# 加载配置文件
app.config.from_object("configs")
# 创建sqlalchemy对象
db = SQLAlchemy(app)
# 使用flask_restful创建api对象,用于注册路由
api = Api(app)


# 编写类视图
class HelloWorldView(Resource):
    def get(self):
        name = request.args.get("name")
        age = request.args.get("age")
        gender = request.args.get("gender", default="默认值")
        print(name, age, gender)
        return "HelloWorld"

    def post(self):
        name = request.json.get("name")
        age = request.json.get("age")
        gender = request.json.get("gender")
        return {
            "code": 200,
            "msg": "请求成功",
            "data": {
                "name": name,
                "age": age,
                "gender": gender
            }
        }


# 编写model
class Student(db.Model):
    """
    学生表
    """
    __tablename__ = 'student'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text)  # 姓名
    gender = db.Column(db.Integer)  # 性别


# 注册路由
api.add_resource(HelloWorldView, r"/hello")

if __name__ == '__main__':
    app.run(port=8716, host='0.0.0.0')
    # 查询所有学生
    # students = Student.query.all()
    # for student in students:
    #     print(student.name)
    # 查询性别为女的学生
    # students = Student.query.filter(Student.gender == "女")
    # for student in students:
    #     print(student.name)
    # 新增唐雪见
    # student = Student(name="唐雪见",gender="女")
    # db.session.add(student)
    # db.session.commit()
    # 删除唐雪见
    # student = Student.query.filter(Student.name == "唐雪见").first()
    # db.session.delete(student)
    # db.session.commit()

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值