/ / Was ist der empfohlene Ansatz für die SlugField-Validierung im Django-REST-Framework? - Django, Django-Ruhe-Rahmen

Was ist der empfohlene Ansatz für die SlugField-Validierung im Django-REST-Framework? - Django, Django-Ruhe-Rahmen

Ich baue eine RESTful-API mit dem Django-REST-Framework. Eines meiner Modelle sieht ungefähr so ​​aus:

class Zone(models.Model):
name = models.SlugField(max_length=50, unique=True)
... other fields

Also habe ich einen Serializer wie folgt aufgebaut:

class ZoneSerializer(serializers.ModelSerializer):

class Meta:
model = Zone
fields = ("name", ... other fields)

Beim Erstellen von Daten zum Erstellen einer neuen Zone bin ich mir nicht sicher, für wie viel Validierung ich verantwortlich bin und wie viel automatisch erfolgen soll. Ich habe folgende Testfälle ausprobiert:

  1. Wann name ist ein gültiger Slug von 50 Zeichen oder weniger, die Validierung ist erfolgreich.
  2. Wann name ist ein gültiger Slug mit mehr als 50 Zeichen, die Validierung schlägt mit einer entsprechenden Fehlermeldung fehl.
  3. Wann name ist ein ungültiger Slug (z. B. "abc def"), die Validierung ist erfolgreich und eine Zone wird mit dem ungültigen Namen erstellt.

In den Code eingehend kann ich sehen, dass der Länge eines Feldes wird durch validiert django.core.validators.MaxLengthValidator im run_validators im rest_framework/fields.py, aber validate_slug ist nicht in der Liste der Validierer enthalten.

Ich weiß, dass ich ein hinzufügen kann validate_name Methode zu meinem Serializer wie folgt:

def validate_name(self, attrs, source):
"""
Make sure this is a slug field
"""
value = attrs[source]
if not validators.validate_slug(value):
raise serializers.ValidationError("Not a slug")
return attrs

aber das scheint übertrieben zu sein. Mache ich hier etwas falsch?

Antworten:

2 für die Antwort № 1

Klingt, als gäbe es dort eine gültige Pull-Anfrage. :) validate_slug Wahrscheinlich sollte das automatisch passieren.

Beste Vorgehensweise:

  1. Überprüfen Sie das Verhalten des Django-Slug-Formularfelds gegenüber dem Verhalten des REST-Framework-Serializer-Feldes. Sind sie definitiv anders?
  2. Heben Sie ein Ticket für das Problem auf und notieren Sie, was Sie aus (1) ermittelt haben.
  3. Versuchen Sie, einen fehlerhaften Testfall zu schreiben, und senden Sie ihn als Pull-Anforderung.
  4. Aktualisieren Sie den PR nach Möglichkeit mit dem Fix.
  5. Gewinn !!! 11 !!!! (Nun, holen Sie sich Ihren Namen in den Credits und bekommen Sie ein schönes warmes Gefühl dafür, dass Sie den Fix beigetragen haben)

Prost,

Tom