Heim  >  Artikel  >  Backend-Entwicklung  >  Erhalten Sie eine bessere automatische Vervollständigung für Faker, wenn Sie „factory_boy“ verwenden

Erhalten Sie eine bessere automatische Vervollständigung für Faker, wenn Sie „factory_boy“ verwenden

WBOY
WBOYOriginal
2024-07-27 14:42:33786Durchsuche

Get better autocomplete for Faker when using factory_boy

Bevor die automatische Vervollständigung durch Sprachserver allgegenwärtig war, spielte es keine Rolle, ob der Code so geschrieben war, dass die automatische Vervollständigung einfach war. Beliebte Texteditoren wie Sublime waren nicht in der Lage, den Code ausreichend zu verstehen, um sinnvolle Vorschläge zu liefern. Programmierer haben sich entweder die Befehle ihrer Abhängigkeiten gemerkt oder auf die Dokumentation verwiesen.

Im Jahr 2024 ist Autovervollständigung allgegenwärtig, aber unsere Pakete haben es nicht unbedingt einfacher gemacht. Nehmen Sie dieses Beispiel aus der Dokumentation von Factory Boy:

import factory
from datetime import datetime
from .models import User

class UserFactory(factory.Factory):
    class Meta:
        model = User

    arrival = factory.Faker(
        'date_between_dates',
        date_start=datetime.date(2020, 1, 1),
        date_end=datetime.date(2020, 5, 31),
    )

Das Arrival-Attribut ruft die date_between_dates()-Methode von Faker auf. Leider sagt Ihnen „factory.Faker()“ nicht, welche Faker-Methoden verfügbar sind, und es sagt Ihnen auch nicht, welche Parameter eine Faker-Methode akzeptiert, sobald Sie eine ausgewählt haben. Dieser Code mildert die Vorteile, die Sprachserver bieten.

Autovervollständigungsfälscher in Fabriken

Sie können eine automatische Vervollständigung erhalten, während Sie Faker mit Factory_boy verwenden, indem Sie einen Faker-Aufruf in Factory.LazyFunction() einbinden:

import factory
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(factory.Factory):
    class Meta:
        model = User

    arrival = factory.LazyFunction(lambda: fake.date_between_dates(
        date_start=datetime.date(2020, 1, 1),
        date_end=datetime.date(2020, 5, 31),
    ))

Funktionen, die an Factory.LazyFunction() übergeben werden, werten aus, wenn die Factory eine Instanz erstellt. Wir verpacken unseren Faker-Aufruf in ein Lambda, damit wir ihm Argumente liefern können. Und Ihr Sprachserver kann Ihnen zeigen, welche Parameter fake.date_between_dates() akzeptiert.

Der Einrichtungsaufwand ist geringer, wenn die Faker-Funktion keine Argumente benötigt. So können Sie „factory.LazyFunction()“ mit den Methoden „first_name()“ und „last_name()“ von Faker verwenden:

import factory
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(factory.Factory):
    class Meta:
        model = User

    first_name = factory.LazyFunction(fake.first_name)
    last_name = factory.LazyFunction(fake.last_name)

Der resultierende Code ist etwas länger, als wenn wir „factory.Faker()“ verwendet hätten, aber die Unterstützung durch den Sprachserver ist es mir wert. Ohne sie müsste ich möglicherweise ständig die Dokumentation überprüfen.

Wenn es zu viel zum Tippen ist, können Sie es jederzeit auf einen kürzeren Alias ​​umstellen:

from factory import Factory, LazyFunction as LazyFn
from datetime import datetime
from .models import User

fake = Faker()

class UserFactory(Factory):
    class Meta:
        model = User

    first_name = LazyFn(fake.first_name)
    last_name = LazyFn(fake.last_name)

Das obige ist der detaillierte Inhalt vonErhalten Sie eine bessere automatische Vervollständigung für Faker, wenn Sie „factory_boy“ verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn