[파이썬] mongoengine 사용자 정의 검증 함수

Mongoengine is a Python Object-Document Mapper (ODM) that provides a simple way to interact with MongoDB databases. One of its useful features is the ability to define custom validation functions for your data models. In this blog post, we will explore how to use custom validation functions in mongoengine.

What are custom validation functions?

Custom validation functions allow you to define your own logic to validate the data that is being stored in your MongoDB documents. These functions are executed whenever a document is being saved to the database or whenever a field is being updated. By implementing custom validation functions, you can enforce specific rules or constraints on the data being entered, ensuring its integrity.

How to define a custom validation function?

To define a custom validation function in mongoengine, you need to import the ValidationError class from the mongoengine library and decorate your validation function with the @.val() decorator provided by mongoengine.

Here’s an example of a custom validation function for a User class:

from mongoengine import Document, StringField, ValidationError, connect

connect('mydatabase')
    
class User(Document):
    name = StringField(required=True)
    age = StringField(required=True)
    
    @classmethod
    def age_validation(cls, value):
        if not value.isdigit():
            raise ValidationError("Age must be a valid number.")
        if int(value) < 18:
            raise ValidationError("Minimum age requirement is 18.")

In the above code, we define a User class that has two fields: name and age. We then define a custom validation function called age_validation(). This function checks whether the age is a valid number and if it meets the minimum age requirement. If the validation fails, a ValidationError is raised with an appropriate error message.

To use this custom validation function, you just need to include it as the value for the validation parameter in the field definition:

class User(Document):
    name = StringField(required=True)
    age = StringField(required=True, validation=User.age_validation)

Now, whenever you try to save a User document with an invalid age, the validation function will be executed, and if any errors occur, the save operation will be aborted.

Conclusion

In this blog post, we learned how to use custom validation functions in mongoengine to enforce specific rules or constraints on the data being entered into our MongoDB documents. We saw an example of defining a custom validation function for an age field in a User class and how to incorporate it into our data model.

By utilizing custom validation functions, we can ensure the integrity and validity of our data in MongoDB, providing a more robust and reliable application.