RealWorld: aiohttp, Tortoise ORM

Il n'y a pas d'exemple pour aiohttp sur Real World , et j'ai décidé d'en créer un. Il semble que les développeurs expérimentés n'aient pas le temps de le faire, et les débutants en aiohttp ne comprennent pas comment le faire correctement. J'ai commencé à le faire avec Tortoise ORM. Tout en commençant à faire l'authentification.


Je veux bien faire ce projet, donc il y a beaucoup de questions pour les développeurs aiohttp expérimentés sous la coupe.


Installation du projet


DĂ©pĂŽt


Clonez le référentiel:


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

En développement, j'ai utilisé Python 3.8. Installez les dépendances:


pip install -r requirements.txt

Initialisez la base de données:


python init_db.py

Nous démarrons le serveur:


conduit python -m

Dans le référentiel, il y a une collection Postman RealWorld.postman_collection.json . Importez-le dans Postman et vous pouvez essayer l'API résultante.


PostgreSQL


Par défaut, la base de données SQLite est utilisée.


Pour utiliser PostrgeSQL, vous devez modifier la variable DB_URL dans /conduit/settings.py.


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

Démarrez le service de base de données:


docker-compose up -d

AprÚs cela, initialisez la base de données:


python init_db.py

Structure du fichier de projet


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 . , .



Jusqu'à présent, fait sans sérialiseurs. Trouvé un tel projet , mais il existe une ancienne version de Tortoise ORM.


Il existe d'autres implĂ©mentations de sĂ©rialiseurs. Probablement, avec eux, le dĂ©veloppement est idiomatique et plus rapide. Besoin d'essayer. ORM accrochĂ©, nous devons maintenant ajouter des sĂ©rialiseurs. Ou peut-ĂȘtre ajouter plus de rendus?


Les tests


Pas encore ajoutĂ©. Selon les conditions de la tĂąche, des tests peuvent ĂȘtre effectuĂ©s, mais ils ne sont pas obligatoires.


Conclusion


Vous devez également ajouter la prise en charge des profils, des articles et bien plus encore. Tout le monde est invité au projet pour glorifier son nom depuis des siÚcles et des millénaires. Les conseils et commentaires de développeurs expérimentés sont les bienvenus.

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


All Articles