برنامه نویسی

راهنمای مبتدیان برای محدودیت‌ها و اعتبارسنجی در Flask، SQLAlchemy

بنابراین، شما اینجا هستید تا در مورد محدودیت ها و اعتبارسنجی ها در Flask با SQLAlchemy بیاموزید. اما قبل از فرو رفتن در جزئیات، اجازه دهید به سرعت بفهمیم Flask چیست.

Flask یک چارچوب وب سبک وزن است که به زبان پایتون نوشته شده است، که اغلب به عنوان یک “microframework” شناخته می شود زیرا با ابزارها یا کتابخانه های گسترده همراه نیست. برخلاف فریم‌ورک‌های بزرگ‌تر، Flask شامل یک لایه انتزاعی پایگاه داده داخلی، اعتبارسنجی فرم یا سایر مؤلفه‌ها نمی‌شود، که به توسعه‌دهندگان این آزادی را می‌دهد تا کتابخانه‌های شخص ثالث متناسب با نیازهای پروژه خود را یکپارچه کنند. با وجود ماهیت مینیمالیستی، Flask بسیار توسعه پذیر است. با انواع پسوندها، توسعه‌دهندگان به راحتی می‌توانند ویژگی‌هایی مانند نگاشت شی رابطه‌ای، اعتبارسنجی فرم، آپلود فایل، احراز هویت و موارد دیگر را اضافه کنند که فلاسک را هم انعطاف‌پذیر و هم مقیاس‌پذیر می‌کند.

حالا بیایید در مورد محدودیت ها و اعتبارسنجی ها صحبت کنیم. محدودیت‌ها کمک می‌کنند تا اطمینان حاصل شود که فقط داده‌های مناسب در پایگاه داده ذخیره می‌شوند، در حالی که اعتبارسنجی‌ها اطمینان می‌دهند که داده‌های وارد شده هم معقول و هم امکان‌پذیر هستند. اما چگونه می‌توانیم محدودیت‌ها و اعتبارسنجی‌ها را در Flask و SQLAlchemy پیاده‌سازی کنیم؟ بیایید کاوش کنیم!

محدودیت ها

در زمینه پایگاه‌های داده، یک محدودیت قاعده‌ای است که بر ستون‌های جدول اعمال می‌شود تا از صحت و اعتبار داده‌های ذخیره شده اطمینان حاصل شود. محدودیت ها برای حفظ پاک و یکنواخت داده ها ضروری هستند و از اضافه شدن مقادیر نامعتبر به پایگاه داده جلوگیری می کنند.

هنگام استفاده از SQLAlchemy با Flask، محدودیت ها را می توان به راحتی در کلاس های مدل شما تعریف کرد. دو مورد از متداول‌ترین محدودیت‌ها غیرقابل استفاده و منحصربه‌فرد هستند:

  • محدودیت nullable: این تضمین می کند که یک ستون نمی تواند حاوی مقادیر NULL باشد، به این معنی که فیلد باید همیشه دارای یک مقدار باشد. شما می توانید این را با تنظیم nullable=False هنگام تعریف یک ستون اجرا کنید. به عنوان مثال:
class User(db.Model):
    __tablename__ = "users"

id = db.Column(db.Integer, primary_key=True)

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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

محدودیت -unique: این تضمین می کند که تمام مقادیر یک ستون منحصر به فرد هستند، به این معنی که هیچ دو ردیفی نمی توانند مقدار یکسانی در آن ستون داشته باشند. شما می توانید این را با تنظیم unique=True اعمال کنید. به عنوان مثال:

class User(db.Model):
    __tablename__ = "users"

id = db.Column(db.Integer, primary_key=True)

username = db.Column(db.String, unique=True, nullable=False)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از محدودیت ها به محافظت از پایگاه داده شما در برابر داده های نامعتبر یا متناقض کمک می کند و آنها را به بخشی ضروری از هر برنامه کاربردی قوی تبدیل می کند.

اعتبارسنجی ها

اعتبارسنجی ها بررسی های خودکاری هستند که اطمینان می دهند داده های وارد شده به یک سیستم معقول و امکان پذیر هستند. آنها به عنوان یک محافظ عمل می کنند و از پایگاه داده در برابر داده های نامعتبر با تأیید صحت ورودی قبل از تعهد محافظت می کنند.

در SQLAlchemy، اعتبارسنجی‌ها در مدل‌ها انجام می‌شوند و تنها زمانی فعال می‌شوند که داده‌ها از طریق SQLAlchemy ORM اضافه یا به‌روزرسانی شوند. این تضمین می کند که برنامه شما به طور مداوم این قوانین را اجرا می کند.

برای پیاده سازی اعتبارسنجی، SQLAlchemy یک دکوراتور مناسب @validates ارائه می دهد. در اینجا یک مثال است:

class Expense(db.Model, SerializerMixin):
    __tablename__ = "expenses"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)  # Name of the expense
    amount = db.Column(db.Float, nullable=False)  # Amount of the expense
    date = db.Column(db.Date, nullable=False)  # Date of the expense
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey("categories.id"), nullable=True)

    # Relationships
    user = db.relationship("User", back_populates="expenses")
    category = db.relationship("Category", back_populates="expenses")

    serialize_rules = ("-user.expenses", "-category.expenses",)

    @validates("amount")
    def validate_amount(self, key, value):
        if value <= 0:
            raise ValueError("Amount must be greater than 0.")
        return value

    @validates("date")
    def validate_date(self, key, value):
        if not value:
            raise ValueError("Date is required.")
        return value

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا، اعتبارسنجی مقدار، تضمین می‌کند که مقدار آن بزرگ‌تر از 0 است و در صورت عدم موفقیت اعتبار، یک پیام خطا ارائه می‌دهد. اعتبارسنجی برای تاریخ، تضمین می‌کند که یک مقدار برای تاریخ ارائه شده است، این برای ارائه بازخورد فوری زمانی که داده‌ها از دست رفته است مفید است.

هنگام توسعه برنامه های کاربردی وب، حفظ یکپارچگی داده ها ضروری است. محدودیت‌ها و اعتبارسنجی‌ها با اطمینان از اینکه فقط داده‌های معتبر و معنی‌دار در پایگاه داده شما ذخیره می‌شوند، نقش مهمی در دستیابی به این امر ایفا می‌کنند.

محدودیت هایی که در سطح پایگاه داده اعمال می شوند، به عنوان اولین خط دفاع عمل می کنند و از ذخیره داده های نامعتبر جلوگیری می کنند. از سوی دیگر، اعتبارسنجی ها یک لایه حفاظتی اضافی را در منطق برنامه شما ارائه می دهند و بازخورد فوری و افزایش تجربه کاربر را ارائه می دهند.

با ترکیب مؤثر این روش‌ها، می‌توانید کدی بنویسید که قابل اطمینان‌تر، کمتر مستعد باگ‌ها و مجهزتر برای رسیدگی به سناریوهای غیرمنتظره باشد. پذیرش محدودیت‌ها و اعتبارسنجی‌ها نه تنها به محافظت از داده‌های شما کمک می‌کند، بلکه طراحی برنامه‌ای تمیز، قابل نگهداری و قوی را نیز ارتقا می‌دهد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا