RealWorld: aiohttp, Tortoise ORM

Es gibt kein Beispiel für aiohttp in der realen Welt , und ich habe beschlossen, eines zu erstellen. Erfahrene Entwickler haben anscheinend keine Zeit dafür, und Anfänger in aiohttp verstehen nicht, wie man es richtig macht. Ich habe angefangen mit Tortoise ORM. Beim Starten der Authentifizierung.


Ich möchte dieses Projekt richtig machen, daher gibt es viele Fragen für erfahrene Aiohttp-Entwickler.


Projektinstallation


Repository


Klonen Sie das Repository:


git clone git@github.com: nomhoi / aiohttp-realworld-example-app.git

In der Entwicklung habe ich Python 3.8 verwendet. Installieren Sie die Abhängigkeiten:


pip install -r Anforderungen.txt

Initialisieren Sie die Datenbank:


python init_db.py

Wir starten den Server:


Python-m-Leitung

Im Repository befindet sich eine Postman-Sammlung RealWorld.postman_collection.json . Importieren Sie es in Postman und Sie können die resultierende API ausprobieren.


PostgreSQL


Standardmäßig wird die SQLite-Datenbank verwendet.


Um PostrgeSQL verwenden zu können, müssen Sie die Variable DB_URL in /conduit/settings.py ändern.


DB_URL = "postgres: // postgres: postgres@0.0.0.0: 5432 / postgres"

Starten Sie den Datenbankdienst:


Docker-Compose -d

Initialisieren Sie danach die Datenbank:


python init_db.py

Projektdateistruktur


Django: . .


, , RealWorld Django.


— conduit.


API


API


POST /api/users


POST /api/users/login


GET /api/user


/authentication/views.py.


CORS


aiohttp_cors.


# Configure default CORS settings.
cors = aiohttp_cors.setup(app, defaults={
    "*": aiohttp_cors.ResourceOptions(
        allow_credentials=True,
        expose_headers="*",
        allow_headers="*",
    )
})

# Configure CORS on all routes.
for route in list(app.router.routes()):
    cors.add(route)

, , .


, .


JWT


aiohttp_jwt:


    app = web.Application(
        middlewares=[
            JWTMiddleware(
                settings.SECRET_KEY,
                whitelist=[
                    r'/api/users',
                ]
            )
        ]
    )

JWT , Authorization Token Bearer. Django — Token. .


User


Tortoise ORM


class TimestampedMixin:
    created_at = fields.DatetimeField(auto_now_add=True)
    updated_at = fields.DatetimeField(auto_now=True)

class AbstractBaseModel(Model):
    id = fields.IntField(pk=True)

    class Meta:
        abstract = True

class User(TimestampedMixin, AbstractBaseModel):
    username = fields.CharField(db_index=True, max_length=255, unique=True)
    email = fields.CharField(db_index=True, max_length=255, unique=True)
    password = fields.CharField(max_length=128)

    class Meta:
        table = "user"

    def __str__(self):
        return self.username

, Django :


ordering = ['-created_at', '-updated_at']

, User. .


Django: + PBKDF2. .



Tortoise ORM . , .



Bisher ohne Serialisierer. Ich habe ein solches Projekt gefunden , aber es gibt eine alte Version von Tortoise ORM.


Es gibt andere Implementierungen von Serialisierern. Wahrscheinlich ist die Entwicklung bei ihnen idiomatisch und schneller. Müssen versuchen. ORM süchtig, jetzt müssen wir Serializer hinzufügen. Oder vielleicht mehr Renderings hinzufügen?


Tests


Noch nicht hinzugefügt. Entsprechend den Bedingungen der Aufgabe können Tests durchgeführt werden, die jedoch nicht erforderlich sind.


Fazit


Sie müssen auch Unterstützung für Profile, Artikel und vieles mehr hinzufügen. Jeder ist zu dem Projekt eingeladen, um seinen Namen für Jahrhunderte und Jahrtausende zu verherrlichen. Hinweise und Kommentare von erfahrenen Entwicklern sind willkommen.

Source: https://habr.com/ru/post/undefined/


All Articles