验证和约束...值得努力
#初学者 #教程 #python #flask

您是否正在努力确保与您合作的数据有效?不用担心,你并不孤单。作为开发人员,验证数据是确保应用程序安全,稳定且可预测的关键方面。换句话说,验证是确保我们收到的数据是我们期望的数据的一种方法。

验证可能是一个棘手的概念,可以缠绕您的头,但它们是编码的重要组成部分。在这篇文章中,我们将探讨如何使用验证来确保您的数据准确且无错误。

开始,让我们看一下下面的代码段:

class Mission(db.Model, SerializerMixin):
    __tablename__ = 'missions'
    __table_args__ = (
        db.CheckConstraint('length(content) >= 250', name='max_content_length'),
    )

    serialize_rules = ('-scientist.missions', '-planet.missions', '-created_at', '-updated_at',)


    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    year = db.Column(db.Integer)
    parameter = db.Column(db.String)
    summary = db.Column(db.String, db.CheckConstraint('len(summary) <= 250', name='min_summary_length'))
    content = db.Column(db.String, db.CheckConstraint('len(content) > 250', name='max_content_length2'))

    scientist_id = db.Column(db.Integer, db.ForeignKey('scientists.id'))
    planet_id = db.Column(db.Integer, db.ForeignKey('planets.id'))

此代码使用任务,星球和科学家的示例。我们的任务类具有各种属性,包括名称,年份,参数,摘要,内容,以及与科学家和星球类的关系。要验证这些属性,必须包括几种验证方法。

此代码中的每个验证方法将使用 @Validates 装饰器来指定其验证的属性。该装饰器允许您指定每当设置或更新属性时称为的函数,从而确保数据始终有效。

例如,要验证名称属性,我们使用validate_name方法:

@validates('name')
def validate_name(self, key, name):
    if not name:
        raise ValueError("Mission must have a name")
    return name

在上面的代码中,我们检查名称属性是否存在,如果不存在,则提出 valueerror 。否则,我们返回名称属性。

我们还使用 @Validates 装饰器来验证年度,参数,内容,摘要,Scientist_ID和Planet_id属性。在每种情况下,我们使用条件语句并提出 valueerror 如果验证失败。

例如,要验证年度属性,我们可以使用validate_year方法:

@validates('year')
def validate_year(self, key, year):
    if len(str(year)) != 4:
        raise ValueError("Mission Year must be 4 digits.")
    return year

在上面的代码中,我们检查年度属性是否为4位数字。如果不是这样,我们会提出 valueerror

验证中有许多方法,有时需要一些棘手和合乎逻辑的思维来创建适合您的确切情况的思维。验证确保我们存储的数据清洁且一致,这有助于防止应用程序中的错误和意外行为。但是,仅验证不足以保证数据完整性。我们还需要使用约束来确保我们的数据满足特定的要求。输入约束。

如果滚动滚动并查看初始任务代码,您将看到:

name = db.Column(db.String, nullable=False)

nullable = false 是一个约束。并且有许多不同的不同,包括 unique = true 默认值= value max_length = value 。但是,这些可能不符合所有情况。因此,我也会介绍另一种约束。 checkconstraint

checkconstraint 在列定义中定义时,它仅与该列绑定。另一方面,当 checkconstraint table_args 中定义时,将其应用于整个表格。我们可以使用 db.checkconstraint 专门和范围的范围来指定内容和摘要属性的最小和最大长度。这就是外观:

__table_args__ = (
    db.CheckConstraint('length(content) >= 250', name='max_content_length'),
)

summary = db.Column(db.String, db.CheckConstraint('len(summary) <= 250', name='min_summary_length'))

上述两个 checkconstraint s is有效,可以用作情况的要求。重要说明:您必须给checkconstraint一个唯一的名称,否则它将无法正常运行。它也必须全部包含(''),这使约束成为字符串。不用担心,它会读取它,好像不是被迫成为字符串一样。

那么,为什么验证和约束如此重要?好吧,简而言之,它们有助于确保您的代码正常工作。没有验证,很容易意外地将错误引入您的数据,这可能会导致问题。约束条件通过防止不符合特定标准存储在数据库中的数据来提供额外的数据保护层。通过验证数据,您可以尽早发现错误并确保您的代码按预期工作。

总而言之,验证和约束是确保我们的应用程序数据安全和一致的重要工具。它们有助于防止我们的应用程序中的错误和意外行为,最终使最终用户受益,对于任何成功的项目都是必不可少的。它们是编码的关键部分。当然,就像任何编码概念一样,验证和约束对于掌握可能是具有挑战性的。但是,有了持久和决心,您可以学习任何东西。当您刚开始时,自然会感到不知所措或不确定自己。通过阅读和实验,您可以开始更好地了解验证方式以及如何有效使用它们。因此,继续推动自己学习更多。请记住,学习编码可能很困难,但是每个人都必须从某个地方开始。通过勤奋和有目的地,永不放弃,您可以克服任何障碍。随着时间和练习,您甚至可以掌握最复杂的编码概念。