RealWorld: aiohttp, Tortoise ORM

No hay ningún ejemplo para aiohttp en el mundo real , y decidí hacer uno. Parece que los desarrolladores experimentados no tienen tiempo para hacer esto, y los principiantes en aiohttp no entienden cómo hacerlo correctamente. Empecé a hacerlo con Tortoise ORM. Al comenzar a hacer la autenticación.


Quiero hacer que este proyecto sea correcto, por lo que hay muchas preguntas para los desarrolladores de aiohttp con experiencia bajo el corte.


Proyecto de instalacion


Repositorio


Clonar el repositorio:


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

En desarrollo, usé Python 3.8. Instalar las dependencias:


pip install -r required.txt

Inicialice la base de datos:


python init_db.py

Iniciamos el servidor:


python -m conducto

En el repositorio hay una colección Postman RealWorld.postman_collection.json . Importarlo en Postman y puede probar la API resultante.


PostgreSQL


Por defecto, se utiliza la base de datos SQLite.


Para usar PostrgeSQL, debe cambiar la variable DB_URL en /conduit/settings.py.


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

Inicie el servicio de base de datos:


docker-compose up -d

Después de eso, inicialice la base de datos:


python init_db.py

Estructura del archivo del proyecto


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



Hasta ahora, hecho sin serializadores. Encontré un proyecto así , pero hay una versión antigua de Tortoise ORM.


Hay otras implementaciones de serializadores. Probablemente, con ellos el desarrollo es idiomático y más rápido. Necesitas intentar. ORM enganchado, ahora necesitamos agregar serializadores. ¿O tal vez agregar más renders?


Pruebas


Aún no agregado. Según las condiciones de la tarea, se pueden realizar pruebas, pero no son necesarias.


Conclusión


También necesita agregar soporte para perfiles, artículos y mucho más. Todos están invitados al proyecto para glorificar su nombre durante siglos y milenios. Sugerencias y comentarios de desarrolladores experimentados son bienvenidos.

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


All Articles