Ich habe ein Django-Formular, bei dem eines der Felder ein TextInput
für eine Straßenadresse ist.
Ich möchte die Daten normalisieren. Zum Beispiel:
%Vor%Oder so ähnlich. Ich verwende bereits geopy für die Geokodierung. Vielleicht könnte das helfen?
Auch: Wo sollte ich normalisieren? Im Datenbankmodell oder in der Clean-Funktion des Formularfelds?
Der zuverlässigste Weg, dies zu tun, besteht darin, einen echten Verifikationsdienst zu nutzen. Es wird nicht nur die Adresskomponenten gemäß USPS-Standards standardisieren (normalisieren) (siehe Veröffentlichung 28 ) >), aber Sie werden auch sicher sein, dass die Adresse real ist.
Volle Offenlegung: Ich arbeite für SmartyStreets, die genau so einen Service bietet. Hier ist ein sehr einfacher Python-Beispielcode, der zeigt, wie Sie unseren Service über eine HTTP-GET-Anfrage nutzen können:
Ich habe kürzlich ein Street-Address Python-Modul erstellt, und StreetAddressFormatter kann verwendet werden, um Ihre Adresse zu normalisieren.
Eine Möglichkeit wäre, Geopy zu verwenden, um die Adresse bei jemandem wie Yahoo oder Google Maps zu suchen, der dann die vollständige Adresse der Person (en) zurückgibt, mit der sie übereinstimmen. Möglicherweise müssen Sie darauf achten, dass Apartmentnummern in der zurückgegebenen Adresse abgeschnitten werden (z. B. "221 Amsterdam Av # 330" wird zu "221 AMSTERDAM AVENUE"). Darüber hinaus erhalten Sie auch die Stadt / Land / Staat Informationen, die der Benutzer auch abgekürzt oder falsch geschrieben haben kann.
Falls mehrere Übereinstimmungen vorhanden sind, können Sie den Benutzer zur Eingabe einer Rückmeldung über die Adresse auffordern. Wenn keine Übereinstimmungen vorhanden sind, können Sie den Benutzer darüber informieren und möglicherweise zulassen, dass die Adresse trotzdem gespeichert wird. Dies hängt davon ab, wie wichtig eine gültige Adresse ist und wie viel Vertrauen Sie in die Gültigkeit der Adresssuche-Anbieter setzen. p>
Was diese Normalisierung in der Form vs. Modell anbelangt, weiß ich nicht, was die bevorzugte Django-Art ist, Dinge zu tun, aber meine Präferenz liegt in der Form, zum Beispiel:
%Vor%Sie können diese Nachschlagefunktion in das Modell (oder eine Datei helpers.py) werfen, falls Sie sie in anderen Bereichen wiederverwenden möchten
So habe ich das angesprochen (kein Wortspiel beabsichtigt):
%Vor% Ich verwende dann Place.display_address
in Vorlagen. Dies ermöglicht mir, die ursprünglichen vom Benutzer übermittelten Daten unverändert in der Datenbank zu belassen und einfach display_address
zu verwenden, wenn ich eine normalisierte Anzeigeversion haben möchte.
Öffnen Sie für Kommentare / Vorschläge.
Tags und Links python django django-forms django-models geopy