Bottle Formulare

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
noisefloor
User
Beiträge: 4181
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
meego hat geschrieben:Dies hier: Link.
Klar geht das, steht auch so in der WTForms Doku
Hat das weniger Ressourcenverbrauch?
"Premature optimization is the root of all evil" - bring' dein Projekt doch erst mal überhaupt zum Laufen, bevor due dir über Optimierungen im Nana-Sekunden Berech gedanken machst...

Gruß, noisefloor
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Hallo
BlackJack hat geschrieben:@meego: Na Du hast halt nicht alle Sprachen zu einer ID in einem Datensatz sondern für jede ID und Sprache einen eigenen Datensatz.

Code: Alles auswählen

1 en House
1 de Haus
2 en Car
2 de Auto
Wie nennt sich der zusammengesetzte Primärschlüssel auf Englisch? Was ist von der ID-Redundanz zu halten?
ob man unsinnigen, zu komplizierten Code schreibt, oder den genau für diesen Fall vorgesehenen.
Das Wörterbuch muss man ja mit beiden Fällen erstellen. Vorgesehen sind gemäss Links beide Methoden:
Link Link
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

meego hat geschrieben:Wie nennt sich der zusammengesetzte Primärschlüssel auf Englisch?
Composite primary key.
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

meego hat geschrieben:Vorgesehen sind gemäss Links beide Methoden:
Was heißt "vorgesehen"? Es gibt Fälle, in denen die update-Funktion durchaus Sinn macht. Dein Fall gehört jedoch nicht dazu.
BlackJack

@meego: Nein, nur bei `update()` wird ein zusätzliches *unnötiges* Wörterbuch erstellt, extra nur damit man damit `update()` aufrufen kann.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

@BlackJack:

dict = {}
dict[key] = "value"

? Oder meinst du die Update-Methode erzeugt im Speicher immer ein neues Dict?

Der ComposityKey scheint wirklich nicht ganz simpel (ich habe ca. 20 Optionen) und als Rückgabewert benötige ich dann doch nur die ID:

Code: Alles auswählen

class BlogToTag(Model):
    """A simple "through" table for many-to-many relationship."""
    blog = ForeignKeyField(Blog)
    tag = ForeignKeyField(Tag)

    class Meta:
        primary_key = CompositeKey('blog', 'tag')
BlackJack

@meego: Nicht die `update()`-Methode sondern *Du* als Programmierer erzeugst ein Wörterbuch und rufst damit die `update()`-Methode auf. *Siehst* Du das nicht?

Code: Alles auswählen

mapping = dict()
mapping.update({'key': 'value'})
#              ^^^^^^^^^^^^^^^^
#               ein Wörterbuch
Was ist an einem zusammengesetzen Primärschlüssel denn kompliziert? Und wieso brauchst Du als Rückgabewert die ID? Doch wohl eher den Text der zu dem zusammengesetzten Primärschlüssel gehört. Alternativ kann man natürlich auch noch zusätzlich einen künstlichen Primärschlüssel einführen und auf die beiden indentifizierenden Spalten einen Index legen. Also bei Deinem Beispiel. An der N:M-”Zwischentabelle” die Du da von irgendwo kopiert hast, macht so etwas natürlich keinen Sinn. Also eigentlich auch bei Deinem Beispiel nicht wirklich.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

@BlackJack: Ja schon, aber es sind für mich in beiden Fällen zwei Linien Code.

Es ist eine Wohnungoptionentabelle zur Wohnungstabelle. Es ist immer eine Option pro Wohnung möglich. Die einzelnen Optionen sind ziemlich fix und liegen in mehreren Sprachen vor, wenn man das über die Datenbank lösen will. Die ID der Option ist ein FK in der Wohnungstabelle. Wozu benötige ich den Text?

Das Beispiel ist aus der Peewee Doku, wie man 'nen zusammengesetzten Primärschlüssel erstellt.
BlackJack

@meego: Den Text benötigst Du zum Anzeigen. Sonst würdest Du den ja gar nicht benötigen. ;-) Das heisst Du willst ID + Text wissen. Aber wie schon gesagt würde ich Übersetzungen in der Regel anders lösen.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

@BlackJack: Jup, aber ich meinte vom Inputformular zurück benötige ich ihn nicht mehr (könnte ich dann jederzeit abfragen, oder?). Kannst du grundsätzlich erläutern wie Babel funktioniert? Ich nehme mal an es wäre das: Link. Ist aber völlig unverständlich geschrieben. :mrgreen:
BlackJack

@meego: Nee, ich denke gettext & Co sind nicht mal eben in zwei Sätzen erklärt. Das ist ja auch ein kompliziertes Thema. Die meisten Leute kennen ja nur zwei, drei Sprachen und haben keine Ahnung was es alles an Regeln und Ausnahmen in anderen Sprachen geben kann, zum Beispiel was Ein- und Mehrzahl angeht bzw. dass das bei einigen Sprachen gar keine binäre Sache ist, sondern das da noch mehr unterschieden wird.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

@BlackJack: Kurze Rede, langer Sinn: Du empfiehlst mir die Tabelle erst einmal auf id/deutscher Text zu beschränken und mich dann später um Sprachen zu kümmern..
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Wieso stellen ORMs eigentlich nicht selber Methoden für die Validationsprüfung zur Verfügung?
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

@meego: Tun sie doch. Zudem kann man noch auf Datenbankebene constraints setzen, wenn sie unterstützt werden.
BlackJack

@meego: Zum einen weil ORMs nicht wissen wo die Daten herkommen und bei vielen ”Quellen” bereits Mechanismen zur Validierung bereitstehen und auf der anderen Seite auch auf der Seite der Datenbank über CONSTRAINT Prüfungen möglich sind, Spezielle (NOT NULL, UNIQUE, PRIMARY KEY) oder auch allgemein formulierbare mit CHECK.

Ausserdem bietet SQLAlchemy beispielsweise durchaus die Möglichkeit über den `sqlalchemy.orm.validates()`-Dekorator Methoden zur Validierung von Attributwerten zu schreiben.
Benutzeravatar
noisefloor
User
Beiträge: 4181
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
meego hat geschrieben:Wieso stellen ORMs eigentlich nicht selber Methoden für die Validationsprüfung zur Verfügung?
In WTForms zu validieren hat außerdem den Vorteil, dass WTForms bei Fehlern in der Validierung direkt ein neues Formular inkl. Fehlerausgabe generien kann - das kann ein ORM halt nicht, weil's eine Ebene tiefer sitzt.
meego hat geschrieben:Kurze Rede, langer Sinn: Du empfiehlst mir die Tabelle erst einmal auf id/deutscher Text zu beschränken und mich dann später um Sprachen zu kümmern..
Alsp ich würde das ganze schon mal an einer Mini-Applikation (muss ja nicht unbedingt dein Immobilien-Projekt sein) üben, damit du siehst, wie das funktioniert. Außerdem könnte es ja auch sein, dass du damit überhaupt nicht klar kommst, was wiederum einfluss auf den Entwurf den Applikation / Datenbank haben könnten.

Und der Vollständigkeit halber sei noch angemerkt, dass Django i18n ootb unterstützt.

Gruß, noisefloor
Benutzeravatar
Kebap
User
Beiträge: 774
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

noisefloor hat geschrieben:Und der Vollständigkeit halber sei noch angemerkt, dass Django i18n ootb unterstützt.
Übersetzung: Wenn du Django benutzen würdest, wie seit Wochen empfohlen, müsstest du auch das Rad "Verwaltung übersetzter Texte" nicht neu erfinden.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Gibt auch ein paar django apps: https://www.djangopackages.com/grids/g/i18n/

i18n ist halt auch ein komplexes Thema...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Hallo
In WTForms zu validieren hat außerdem den Vorteil, dass WTForms bei Fehlern in der Validierung direkt ein neues Formular inkl. Fehlerausgabe generien kann - das kann ein ORM halt nicht, weil's eine Ebene tiefer sitzt.
Es könnte diese Methoden vielleicht auch implementieren und selber die Formularfelder erzeugen..
Übersetzung: Wenn du Django benutzen würdest, wie seit Wochen empfohlen, müsstest du auch das Rad "Verwaltung übersetzter Texte" nicht neu erfinden.
Will ich auch nicht. Und dafür müsste ich dann vermutlich erst einmal ein halbes Jahr lang das wesentlich unintuitivere Django erlernen, um überhaupt etwas damit anstellen zu können.
Benutzeravatar
noisefloor
User
Beiträge: 4181
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
meego hat geschrieben:Es könnte diese Methoden vielleicht auch implementieren und selber die Formularfelder erzeugen..
Äh... heißt was genau? Verstehe ich gerade nicht.

EDIT: bezieht das "Es" auf das ORM?

Gruß, noisefloor
Antworten