/ / Aký je odporúčaný prístup pre validáciu služby SlugField v rámci Django REST? - django, django-rest-framework

Aký je odporúčaný prístup pre validáciu služby SlugField v rámci systému Django REST? - django, django-rest-framework

Budem vytvárať RESTful API pomocou rámca Django REST Jeden z mojich modelov vyzerá trochu takto:

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

Takže som vytvoril serializátor takto:

class ZoneSerializer(serializers.ModelSerializer):

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

Pri odosielaní údajov na vytvorenie novej zóny si nie som istý, koľko validácie som zodpovedný a koľko by sa malo uskutočniť automaticky. Skúšal som nasledujúce testovacie prípady:

  1. Kedy name je platný slimák s hodnotou 50 znakov alebo menej, validácia je úspešná.
  2. Kedy name je platný znak s veľkosťou 50 alebo viac znakov, validácia zlyhá s príslušnou chybovou správou.
  3. Kedy name je neplatná slug (napr. "abc def"), overovanie je úspešné a je vytvorená zóna s neplatným názvom.

Pri kopaní do kódu vidím, že dĺžka poľa je potvrdené django.core.validators.MaxLengthValidator v run_validators v rest_framework/fields.py, ale validate_slug nie je zahrnutý v zozname validátorov.

Viem, že môžem pridať a validate_name spôsob mojej serializer takto:

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

ale to sa zdá byť nadmerné. Robím niečo v poriadku?

odpovede:

2 pre odpoveď č. 1

Zdá sa, že tam je platná požiadavka na stiahnutie. validate_slug pravdepodobne by sa malo stať automaticky.

Najlepší postup:

  1. Dvojitá kontrola správania poľa formátu Django z hrudníka v porovnaní so správaním polí serializátora REST - sú rozhodne odlišné?
  2. Zdvihnite lístok na problém a všimnite si, čo ste určili (1).
  3. Pokúste sa napísať chybný testovací prípad a odošlite ho ako požiadavku na vytiahnutie.
  4. Aktualizujte PR s opravou, ak je to možné.
  5. Zisk !!! 11 !!!! (Dobre, dostaňte svoje meno do kreditov a získajte pekný pocit z toho, že ste to prispeli)

Na zdravie,

Tomáš