我是API的新手,正在创建一个FLask Restful API。我想知道我需要为我想在DB中进行的任何行操作创建新的模型和资源类吗?例如,我在数据库中创建了一个学生。在创建时,他没有任何成绩,所以我创建了StudentModel和StudentResource,并使用了Student表。当我需要使用PUT请求更新成绩时,我是否需要创建一个SudentGradeModel和StudentGradeResource来访问学生表?
每个Model类都包含Resource类通过导入Model类使用的辅助函数。Resource类只有GET、POST、PUT和DELETE方法。
class StudentModel(db.Model):
__tablename__ = 'Student'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
class_sec = db.Column(db.String(4))
def __init__(self, id, name, class_sec):
self.id = id
self.name= name
self.class_sec = class_sec
from flask_restful import Resource, reqparse
from models.student_model import StudenteModel
# noinspection PyMethodMayBeStatic
class StudentResource(Resource):
parser = reqparse.RequestParser()
parser.add_argument('id', type=int, required=True, help='Every Student must have an ID')
parser.add_argument('name', type=str, required=True, help='Every Student must have a name')
parser.add_argument('class', type=str, required=True, help='Every Student must be assigned a class and section')
def get(self, id):
pass
def post(self, id):
pass
class StudentGradeModel(db.Model):
__tablename__ = 'Student'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
grade = db.Column(db.String(2), primary_key=True)
def __init__(self, id, grade):
self.id = id
self.grade = grade
# noinspection PyMethodMayBeStatic
class StudentGradeResource(Resource):
parser = reqparse.RequestParser()
parser.add_argument('id', type=int, required=True, help='Student must have an ID to access table')
parser.add_argument('grade', type=str, required=True, help='Student must have a grade to be assigned')
def get(self, id):
pass
def post(self, id):
pass
类似地,如果我只想更新部分,我就必须用PUT请求创建一个类似的Classe。
谢谢
根据这个问题,我假设一个学生只能有一个成绩,或者根本没有成绩,因为如果他们可以有多个成绩,那么一个成绩必须在一个单独的表中。
表创建SQL如下所示:
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
class_sec CHAR(4) NOT NULL,
grade INTEGER
);
(我更改了等级的数据类型,因为数字数据不应该存储为字符串(
不,不能也不应该为同一张表有两个模型。模型应该表示表本身。
class StudentModel(db.Model):
__tablename__ = 'Student'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30), nullable=False)
class_sec = db.Column(db.String(4), nullable=False)
grade = db.Column(db.Integer)
def __init__(self, id, name, class_sec):
self.id = id
self.name= name
self.class_sec = class_sec
另一方面,可以有多个资源来连接一个表。然而,每个资源都与一条路线相关联,你不应该有一个单独的资源来评分,除非你需要另一条路线,我认为你没有。
class Student(Resource):
...
def put(self, id):
request_body = request.get_json()
# do your things here