Liberapay ist eine wiederkehrende Spendenplattform. Wir helfen Ihnen, die Schöpfer und Projekte zu finanzieren, die Sie schätzen.
Hinweis: Dieser WebApp ist nicht selbsthostierbar.
Willst du chatten? Begleiten Sie uns auf dem Gitter.
Alternativ können Sie eine Nachricht in unserem Github -Salon veröffentlichen.
Sie können helfen, Liberapay über Webblate zu übersetzen. Aktueller Status:
Wenn Sie Fragen zur Übersetzung von Liberapay haben, können Sie sie im Salon stellen.
Liberapay wurde ursprünglich aus Gratipay gegabelt und erbte seinen Web-Micro-Framework Pando ( Né Aspen), der auf dem Routing von Dateisystemen basiert und zu vereinfachen. Mach dir keine Sorgen, es ist ganz einfach. Um beispielsweise liberapay einen Hello $user, your id is $userid -Nachricht für Anfragen an die URL /$user/hello , Sie müssen nur die Datei www/%username/hello.spt mit diesem Inneren erstellen:
from liberapay.utils import get_participant
[---]
participant = get_participant(state)
[---] text/html
{{ _("Hello {0}, your id is {1}", request.path['username'], participant.id) }}
Wie durch die letzte Zeile dargestellt, lautet unsere Standard -Template -Engine Jinja.
Die Funktion _ versucht, die Nachricht in die Sprache des Benutzers zu übersetzen und entgeht den Variablen ordnungsgemäß (sie weiß, dass eine Nachricht für eine HTML -Seite generiert wird).
Der Python-Code in Simplate dient nur zur anforderungsspezifischen Logik. Der gemeinsame Backend-Code befindet sich im liberapay/ Verzeichnis.
Stellen Sie sicher, dass zuerst die folgenden Abhängigkeiten installiert sind:
Dann rennen:
make env
Jetzt müssen Sie sich Superuser Postgres -Kräfte geben (falls dies noch nicht erledigt wurde) und zwei Datenbanken erstellen:
su postgres -c "createuser --superuser $(whoami)"
createdb liberapay
createdb liberapay_tests
Wenn Sie ein tieferes Verständnis benötigen, schauen Sie sich die Datenbankrollen an und verwalten Datenbanken Abschnitte der Dokumentation von PostgreSQL.
Dann können Sie die DB einrichten:
make schema
Umgebungsvariablen werden für die Konfiguration verwendet, die Standardwerte sind in defaults.env und tests/test.env . Sie können sie in local.env und tests/local.env überschreiben.
Sobald Sie alles installiert und die Datenbank eingerichtet haben, können Sie die App ausführen:
make run
Es sollte jetzt unter http: // localhost: 8339/zugänglich sein.
Standardmäßig sind keine Benutzer bereitgestellt. Sie können Konten wie auf der realen Website erstellen. Wenn Sie möchten, können Sie auch eine Reihe gefälschter Benutzer erstellen (aber sie sind nicht großartig):
make data
Um ein Konto zu erteilen, ändern Sie die Datenbank wie SO:
psql liberapay -c "update participants set privileges = 1 where username = 'account-username'"
Um einen lokalen Zahltag auszuführen, öffnen Sie http: // localhost: 8339/admin/payday und klicken Sie auf die Schaltfläche "Zahltag ausführen ausführen". Sie können OVERRIDE_PAYDAY_CHECKS=yes in der local.env -Datei hinzufügen, um die Sicherheitschecks zu deaktivieren, die verhindern, dass der Zahltag zum falschen Zeitpunkt ausgeführt wird.
Der Python -Code interagiert mit der Datenbank, indem sie RAW SQL -Abfragen über die Postgres.py -Bibliothek senden.
Die offizielle PostgreSQL -Dokumentation ist Ihr Freund im Umgang mit SQL, insbesondere in den Abschnitten "Die SQL -Sprache" und "SQL -Befehle".
Das DB -Schema befindet sich in sql/schema.sql , ändern Sie diese Datei jedoch nicht direkt und setzen Sie die Änderungen in sql/branch.sql nicht. Während der Bereitstellung wird dieses Skript auf der Produktion DB ausgeführt und die Änderungen werden in sql/schema.sql zusammengefasst. Dieser Prozess wird durch release.sh semi-automatisch.
Für unsere Stile js/ wir Sass und Bootstrap style/ Unsere Richtlinie für beide ist es, so wenig wie möglich von ihnen aufzunehmen: Die Website sollte ohne JS fast ausschließlich verwendbar sein, und unser CSS sollte Bootstrap so weit wie möglich nutzen, anstatt viele benutzerdefinierte Regeln zu enthalten, die eine Belastung werden würden, um dies aufrechtzuerhalten.
Wir kompilieren Bootstrap aus der Sass -Quelle im style/bootstrap/ Verzeichnis. Wir tun dies, um es einfach anzupassen, indem wir Werte in style/variables.scss ändern. Das Ändern der Dateien in style/bootstrap/ ist wahrscheinlich eine schlechte Idee.
Für Benutzeroberflächen -Symbole verwenden wir Bootstrap -Symbole. Ein Symbol kann in eine Seite aufgenommen werden, indem das icon von templates/macros/icons.html , z. {{ icon('liberapay') }} aufgerufen wird. Die Symbole werden in der Datei www/assets/icons.svg gespeichert. Um ein neues Symbol in dieser Datei hinzuzufügen, muss das Root <svg> -Element des hinzugefügten Symbols in ein <symbol> -Element umgewandelt werden, wodurch nur das Attribut viewBox beibehalten und ein id -Attribut hinzugefügt wird.
Wenn Sie kein Symbol in Bootstrap -Symbolen finden, das zu Ihrem Anwendungsfall passt, können Sie versuchen, Online -Kataloge wie Flaticon, Icons8, Pictogrammer, SVG Repo und das NOUN -Projekt zu durchsuchen. Für Markensymbole ist einfache Symbole eine gute Ressource.
Der einfachste Weg, die Testsuite durchzuführen, ist:
make test
Dadurch wird das Schema des Test -DB nachgebaut und alle Tests ausgeführt. Um die Dinge zu beschleunigen, können Sie auch die folgenden Befehle verwenden:
make pytest führt nur die Python -Tests durch, ohne den Test DB neu zu erstellenmake pytest-re nur die Tests, die zuvor fehlgeschlagen sind Einige unserer Tests umfassen Interaktionen mit externen Diensten. Um die Tests zu beschleunigen, zeichnen wir die Anforderungen und Antworten automatisch mit VCR auf. Die Datensätze befinden sich im Verzeichnis von tests/py/fixtures , einer pro Testklasse.
Wenn Sie die Interaktionen mit externen Diensten hinzufügen oder ändern, scheitern die Tests, da der VCR die neue oder geänderte Anforderung in den Datensätzen nicht findet und die neue Anfrage standardmäßig aufzeichnet (siehe Datensatzmodi für weitere Informationen). In diesem Fall können Sie Ihrem Testbefehl entweder VCR=new_episodes hinzufügen (z make pytest VCR=new_episodes ) oder die veralteten Fix -Dateien löschen (z. B. rm tests/py/fixtures/TestPayinsStripe.yml ).
Wenn Sie eine API testen, die Identitätsschlüssel verwendet (z. B. die API von Stripe), scheitern einige Anfragen, wenn sie nicht mehr genau identisch sind. Erhöhen Sie in diesem Fall den Wert des offset -Attributs der Testklasse, sodass verschiedene Identitätsschlüssel verwendet werden.
PostgreSQL soll Datenverlust verhindern, sodass es standardmäßig eine Menge synchroner Festplatten schreibt. Um die Anzahl der blockierenden Schreibvorgänge zu verringern, off unser Skript recreate-schema.sh automatisch die Option synchronous_commit für die Testdatenbank. Dies deaktiviert die Synchronisierung jedoch nicht vollständig. Wenn Ihre PostgreSQL -Instanz nur Daten enthält, die Sie sich leisten können, können Sie die Dinge weiter beschleunigen, indem Sie off fsync in die postgresql.conf des Servers auf minimal und max_wal_senders wal_level 0 einstellen.
Liberapay unterstützt derzeit zwei Zahlungsprozessoren: Stripe und PayPal.
Sie können die Rückrufe von Stripe an Ihre lokale Liberapay-Instanz weiterleiten, indem Sie make stripe-bridge leiten. Das Stripe-CLI-Programm muss dafür installiert werden, dass dies funktioniert.
Alle neuen Abhängigkeiten müssen geprüft werden, um zu überprüfen, ob sie weder böswilligen Code noch Sicherheitslücken enthalten.
Wir verwenden Pips Hash-Checking-Modus, um uns vor Abhängigkeit manipulieren zu schützen. Wenn Sie also eine Abhängigkeit hinzufügen oder aktualisieren, müssen die neuen Hashes berechnet und in die Anforderungen Datei einfügen. Dafür können Sie Hashin verwenden:
pip install hashin
hashin package==x.y -r requirements_base.txt
Wenn Sie aus irgendeinem Grund alle Anforderungen neu aufbauen müssen, machen Sie Run make rehash-requirements .
Um alle Abhängigkeiten in der Anforderungsdatei zu aktualisieren, führen Sie hashin -u -r requirements_base.txt aus. Möglicherweise müssen Sie zusätzliche hashin -Befehle ausführen, wenn neue Unterschiede fehlen.
Die Testabhängigkeiten in requirements_tests.txt folgen diesen Regeln nicht, da sie nicht in der Produktion installiert sind. Es liegt an Ihnen, Ihre Entwicklungsumgebung vom Rest Ihres Systems aus zu isolieren, um sie vor möglichen Schwachstellen in den Testabhängigkeiten zu schützen.
Beachten Sie beim Schreiben von Code, der persönliche Informationen übernimmt, die in der DSGVO verankerten Prinzipien.
Hinweis: Liberapay kann nicht selbst gehostet werden, dieser Abschnitt soll nur dokumentieren, wie wir neue Versionen bereitstellen.
Liberapay ist derzeit in AWS (Irland) veranstaltet.
Um die App einfach auszuführen, release.sh . Natürlich müssen Sie zuerst Zugriff erhalten.
CC0 Public Domain Engagement (Einzelheiten finden Sie in dieser Diskussion.)