当前位置: 首页 > wzjs >正文

网站建设与管理收获工业和信息化网站备案系统

网站建设与管理收获,工业和信息化网站备案系统,网站营销策划公司,网站推广苏州Python Flask 开发用于访问数据库的 REST API Python Flask 开发用于访问数据库的 REST API Python Flask 开发用于访问数据库的 REST API 为了说明如何使用 Flask 和 Flask-RESTful 扩展构建 REST API,我们将修改之前网页应用程序,并使用 REST 架构风格…

Python Flask 开发用于访问数据库的 REST API

  • Python Flask 开发用于访问数据库的 REST API

Python Flask 开发用于访问数据库的 REST API

为了说明如何使用 Flask 和 Flask-RESTful 扩展构建 REST API,我们将修改之前网页应用程序,并使用 REST 架构风格访问 Student 对象(Resource对象)。我们希望在请求正文中为 PUTPOST 方法发送参数,而 API 将以 JSON 格式发回响应。带有 REST API 接口的修订版代码如下所示:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from flask_restful import Api, Resource, reqparseapp = Flask(__name__)
api = Api(app)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///student.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

在前面的代码片段中,我们首先初始化了 Flask 应用程序和数据库实例。下一步,我们使用 Flask 实例创建了一个 API 实例。我们通过 api = Api(app) 语句实现了这一点。这个 API 实例是开发其余 API 应用程序的关键,我们将使用它。

接下来,我们需要配置 reqparse 实例,注册我们希望从 HTTP 请求中解析的参数。在我们的代码示例中,我们注册了两个字符串类型的参数:namegrade,如以下代码片段所示:

parser = reqparse.RequestParser()
parser.add_argument('name', type=str)
parser.add_argument('grade', type=str)

下一步是创建 Student 模型对象,这与我们前面写过的代码中的操作相同,只是我们将添加一个 serialize 方法,将对象转换为 JSON 格式。这是将 JSON 响应序列化后再发送回 发送给 API 客户端之前序列化 JSON 响应的重要步骤。还有其他解决方案可以实现同样的目的,但出于简单的原因,我们选择了 此选项。创建 Student 对象的精确示例代码如下:

class Student(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(80), nullable=False)grade = db.Column(db.String(20), nullable=True)def serialize(self):return {'id': self.id,'name': self.name,'grade': self.grade,}

接下来,我们创建两个 Resource 对象,用来访问学生数据库对象。有两个 Resource 对象,分别是 StudentDaoStudentListDao,下面是对做它们的描述:

  • StudentDao:它为每一个单独的资源实例提供了像 getdelete 这样的方法,这些方法会被映射到 HTTP 协议的 GETDELETGE 方法;
  • StudentListDao:它提供了像 getpost 这样的方法。添加 get 方法是为了使用 HTTP 的 GET 方法提供所有的 Student 类型的资源的列表。添加 post 方法是为了使用 HTTP 的 POST 方法添加一个新资源对象。这是一种典型的设计模式,用于实现网页资源的 CRUD 功能。

至于为 StudentDaoStudentListDao 类实现的方法,我们在一条语句中返回状态代码和对象本身。这是 Flask-RESTful 扩展提供的便利。下面是这两个类的代码:

class StudentDao(Resource):def get(self, student_id):student = Student.query.filter_by(id=student_id).first_or_404(description='没有 ID 是 {} 的学生'.format(student_id))return student.serialize()def delete(self, student_id):student = Student.query.filter_by(id=student_id).first_or_404(description='没有 ID 是 {} 的学生'.format(student_id))db.session.delete(student)db.commit()return '', 204class StudentListDao(Resource):def get(self):students = Student.query.all()return [Student.serialize(student) for student in students]def post(self):args = parser.parse_args()name - =args['name']grade - =args['grade']student = Student(name=name, grade=grade)db.session.add(student)db.session.commit()return student, 200

对于 StudentListDao 类的 post 方法,我们使用 reqparse 解析器从请求中提取了姓名和成绩参数。POST 方法的其他实现与前面应用程序示例中的相同。

在示例 API 应用程序的后面两行中,我们将 URL 映射到了资源对象。所有指向 /students/<student_id> 的请求都将重定向到 StudentDao 资源类。所有指向 /students 的请求都将重定向到 StudentListDao 资源类:

api.add_resource(StudentDao, '/student/<student_id>')
api.add_resource(StudentListDao, '/student/list')

对于 在本代码示例中,我们没有添加错误和异常处理,以保持代码简洁,便于讨论。但我们强烈建议在最终实现中加入错误和异常处理。但我们强烈建议在最终实现中加入这一点。

下面是完整的代码:

# 学生资源的 REST API 应用程序
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from flask_restful import Api, Resource, reqparseapp = Flask(__name__)
api = Api(app)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///student.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)parser = reqparse.RequestParser()
parser.add_argument('name', type=str)
parser.add_argument('grade', type=str)class Student(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(80), nullable=False)grade = db.Column(db.String(20), nullable=True)def serialize(self):return {'id': self.id,'name': self.name,'grade': self.grade,}class StudentDao(Resource):def get(self, student_id):student = Student.query.filter_by(id=student_id).first_or_404(description='没有 ID 是 {} 的学生'.format(student_id))return student.serialize()def delete(self, student_id):student = Student.query.filter_by(id=student_id).first_or_404(description='没有 ID 是 {} 的学生'.format(student_id))db.session.delete(student)db.commit()return '', 204class StudentListDao(Resource):def get(self):students = Student.query.all()return [Student.serialize(student) for student in students]def post(self):args = parser.parse_args()name - =args['name']grade - =args['grade']student = Student(name=name, grade=grade)db.session.add(student)db.session.commit()return student, 200api.add_resource(StudentDao, '/student/<student_id>')
api.add_resource(StudentListDao, '/student/list')

<完>


文章转载自:

http://cblnZzvN.Lnmby.cn
http://YvZuRCgZ.Lnmby.cn
http://Zu6yIhf9.Lnmby.cn
http://HDZ6YLIZ.Lnmby.cn
http://UWT4PEV0.Lnmby.cn
http://uZKpQDlN.Lnmby.cn
http://FutB3zhC.Lnmby.cn
http://JFJMSyVQ.Lnmby.cn
http://EDm4sAR5.Lnmby.cn
http://xaxKbJUR.Lnmby.cn
http://9A2dxytI.Lnmby.cn
http://YH5ukYN5.Lnmby.cn
http://QosWvNY8.Lnmby.cn
http://iKZY2Gsk.Lnmby.cn
http://yP3M5hVK.Lnmby.cn
http://4trjEBLJ.Lnmby.cn
http://QCZjQO0B.Lnmby.cn
http://1LhkvzPw.Lnmby.cn
http://Syp9kgRq.Lnmby.cn
http://kv6RYEcb.Lnmby.cn
http://h1mOHiMU.Lnmby.cn
http://nJLMlZYO.Lnmby.cn
http://mcSen19C.Lnmby.cn
http://Ms4x20qI.Lnmby.cn
http://I2dnG5Jw.Lnmby.cn
http://2wvTz56w.Lnmby.cn
http://SMZe2sSQ.Lnmby.cn
http://h1Bkd9UM.Lnmby.cn
http://eUrzcWIJ.Lnmby.cn
http://FasHFEzT.Lnmby.cn
http://www.dtcms.com/wzjs/661764.html

相关文章:

  • 服务好的公司网站建设与维护广告公司起名用字大全
  • 做网站要学那些东西如何打开国外网站
  • 保险理财网站建设沈阳网站app制作
  • 免费安全网站大全入口搜索引擎优化网站
  • 怎么用vs做网站开发天津网站建设如何
  • 网站建设成功案例方案网站建设需要多少钱?
  • 网站体验方案中国知名品牌
  • 湘潭学校网站建设 z磐石网络dw网页制作教程视频简单第二期
  • wordpress子站搭建湖南常德文理学院
  • 钢结构网站慈溪做无痛同济 amp 网站
  • 公司没有自己的网站怎么样学好网页设计
  • 网页制作员厂家怎么对一个网站做优化
  • 东风地区网站建设页面好看的蛋糕网站
  • 怎么注销公司法人身份郑州网站关键字优化
  • 做网站是先买域名还是wordpress批量删除文章
  • 广东城乡住房建设部网站有没有专做烘焙的网站
  • 律师事务所网站方案网址ip查询域名解析
  • 网站做推广需要到工信部备案吗oppo网站开发设计
  • 南昌市住房和城乡建设网站wordpress 1g1核1m
  • 网站建设公司新报网站建设设计规划书
  • 无极电影网站财务管理专业简历制作
  • 银川建立网站手工做女宝宝衣服的网站
  • 网站模块是指什么地方网页设计制作网站素材
  • 关于网站制作微信小程序开发需要什么
  • 学习建网站网站建设与管理读后感
  • 百度收录网站中文称wordpress汉化包安装
  • 双语网站用什么程序做wordpress排行榜主题
  • 南宁网站定制公司建设微信商城网站
  • 免费网站制作报价网站情况建设说明
  • wap建站系统网站建设毕业实习报告