ویژگی تصویر

معرفی کتابخانه validators در پایتون

  /  پایتون   /  کتابخانه validators در پایتون
بنر تبلیغاتی الف

کتابخانه validators یک بسته سبک و کاربردی در اکوسیستم پایتون است که برای اعتبارسنجی (validation) مقادیر ورودی مانند آدرس‌های ایمیل، آدرس‌های وب (URL)، آدرس‌های IP، UUID، شناسه‌های مک و انواع دیگر رشته‌ها و داده‌ها طراحی شده است. این کتابخانه ساده، مستقل و مناسب برای استفاده در فرم‌ها، APIها، و اسکریپت‌های پردازش داده است.

ویژگی‌های کلیدی

  • توابع ساده و قابل‌فهم برای انواع متداول اعتبارسنجی
  • خروجی مشخص: True در صورت معتبر بودن یا شیء ValidationFailure در صورت نامعتبر بودن
  • قابل ترکیب شدن با فریم‌ورک‌ها (مثلاً Flask، Django) و لایه‌های API
  • کم‌حجم، بدون وابستگی‌های سنگین

نصب

pip install validators

این دستور کتابخانه را از PyPI نصب می‌کند و آمادهٔ استفاده در پروژه خواهد بود.

توابع رایج و رفتار خروجی

هر تابع اعتبارسنجی در این کتابخانه معمولاً یک مقدار بولین واقعی یا یک شیء ValidationFailure بازمی‌گرداند. شما می‌توانید خروجی را مستقیماً در شرط‌ها چک کنید یا در صورت خطا پیام خطا را با str() دریافت کنید.

تابعکاربرد
validators.urlاعتبارسنجی آدرس‌های وب
validators.emailاعتبارسنجی آدرس ایمیل
validators.ipv4 / validators.ipv6 / validators.ip_addressاعتبارسنجی آدرس‌های IP
validators.uuidاعتبارسنجی UUID
validators.lengthبررسی طول رشته یا کانتینر
validators.regex / validators.matchاعتبارسنجی بر اساس عبارات منظم

مثال‌های ساده

import validators

# URL
result = validators.url('https://example.com')
if result is True:
    print('Valid URL')
else:
    print('Invalid URL:', result)

# Email
print(validators.email('user@example.com'))

در این کد، تابع validators.url مقدار True یا یک شیء خطا بازمی‌گرداند. اگر نامعتبر باشد، با چاپ مقدار خطا می‌توان دلیل را دید. مثال ایمیل نیز مشابه کار می‌کند.

مدیریت خطا و نمایش پیام

به جای تنها بررسی True/False، معمولاً بهتر است در صورت نامعتبر بودن پیام خطا را ثبت یا به کاربر نمایش دهید:

from validators import url

res = url('http://invalid_domain')
if res is True:
    print('OK')
else:
    print('Validation failed:', str(res))

این الگو به‌ویژه در لاگ‌گذاری و پاسخ‌دهی APIها مفید است؛ زیرا پیام خطا کمک می‌کند مشکل ورودی را سریع‌تر بفهمید.

ترکیب اعتبارسنجی‌ها و ساختن ولیدیتورهای سفارشی

گاهی لازم است چند اعتبارسنجی را ترکیب کنید یا شرط‌های خاص خود را پیاده‌سازی کنید. ساده‌ترین راه نوشتن یک تابع wrapper است:

import validators

def validate_signup(data):
    errors = {}
    if validators.email(data.get('email')) is not True:
        errors['email'] = str(validators.email(data.get('email')))
    if validators.length(data.get('password'), min=8) is not True:
        errors['password'] = 'Password must be at least 8 characters'
    return errors

تابع بالا یک شیء خطا برمی‌گرداند که می‌توان آن را در پاسخ API یا صفحه فرم نمایش داد. استفادهٔ مجدد از توابع validators، سرعت توسعه را افزایش و پیچیدگی را کاهش می‌دهد.

استفاده‌های عملی و موارد کاربرد

  • اعتبارسنجی ورودی‌های فرم در اپلیکیشن‌های وب
  • پیش‌اعتبارسنجی داده‌های ورودی در APIها قبل از ذخیره کردن
  • پاکسازی (sanitization) اولیه و جلوگیری از داده‌های آشغال (garbage input)
  • بررسی داده‌های واردشده از فایل‌های CSV یا منابع خارجی

یک مثال واقعی: اعتبارسنجی payload در یک API کوچک

from flask import Flask, request, jsonify
import validators

app = Flask(__name__)

@app.route('/register', methods=['POST'])
def register():
    data = request.json or {}
    email_valid = validators.email(data.get('email', ''))
    if email_valid is not True:
        return jsonify({'error': str(email_valid)}), 400
    if validators.length(data.get('name', ''), min=2) is not True:
        return jsonify({'error': 'Name too short'}), 400
    return jsonify({'status': 'ok'})

این نمونه نشان می‌دهد چگونه با استفاده از validators می‌توان ورودی‌های API را سریع بررسی کرد و در صورت خطا پاسخ مناسب بازگرداند.

نکات پیشرفته و بهترین روش‌ها

  • همیشه از پیام‌های خطا برای لاگ و دیباگ استفاده کنید؛ اشکال‌یابی داده‌های نامعتبر بدون پیام دشوار است.
  • برای اعتبارسنجی‌های پیچیده‌تر (مثلاً قواعد تجاری) از ترکیب validators با ولیدیتورهای سطح بالاتر مثل pydantic یا marshmallow استفاده کنید.
  • اگر نیاز به اعتبارسنجی سفارشی دارید که validators پوشش نمی‌دهد، یک تابع ساده بنویسید و آن را در لایه ورودی فراخوانی کنید.
  • تست‌های واحد برای ولیدیتورها بنویسید تا تغییرات آینده در رفتار اعتبارسنجی ناخواسته رخ ندهد.

مثال بهبود: تبدیل نتیجه به بولین و پیام واحد

def check_and_message(validator_func, value, default_msg='Invalid'):
    res = validator_func(value)
    if res is True:
        return True, None
    return False, str(res) if res else default_msg

ok, msg = check_and_message(validators.url, 'ftp://example.com')
if not ok:
    print('Error:', msg)

این الگو خروجی یکنواخت برای استفاده در کدهای بالاتر فراهم می‌کند: یک بولین برای تصمیم‌گیری و یک پیام خطا برای نمایش یا لاگ.

جمع‌بندی

کتابخانه validators برای مواردی که نیاز به اعتبارسنجی سریع و قابل‌فهم دارند بسیار مناسب است. با استفاده از توابع آماده می‌توانید در زمان پیاده‌سازی فرم‌ها و APIها صرفه‌جویی کنید و با ترکیب سادهٔ آن‌ها، منطق اعتبارسنجی قابل‌نگهداری و قابل‌تست بسازید. برای سناریوهای پیچیده‌تر می‌توان این بسته را با ابزارهای سطح بالاتر ترکیب کرد.

در صورت نیاز به مثال‌های بیشتر، مقایسه با ابزارهای دیگر (مثل pydantic یا marshmallow) یا نوشتن ولیدیتورهای سفارشی می‌توان نمونه‌های بیشتری ارائه داد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: