RealWorld: aiohttp, Tortoise ORM

Não há exemplo para aiohttp no mundo real , e eu decidi fazer um. Os desenvolvedores experientes, ao que parece, não têm tempo para fazer isso, e os iniciantes no aiohttp não entendem como fazê-lo corretamente. Comecei a fazê-lo com o Tortoise ORM. Ao começar a fazer autenticação.


Quero corrigir esse projeto, de modo que há muitas perguntas para desenvolvedores de aiohttp experientes.


Instalação do Projeto


Repositório


Clone o repositório:


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

No desenvolvimento, usei o Python 3.8. Instale as dependências:


pip install -r requirements.txt

Inicialize o banco de dados:


python init_db.py

Iniciamos o servidor:


Conduta python -m

No repositório, há uma coleção do Postman RealWorld.postman_collection.json . Importe-o para o Postman e você pode tentar a API resultante.


PostgreSQL


Por padrão, o banco de dados SQLite é usado.


Para usar o PostrgeSQL, você precisa alterar a variável DB_URL em /conduit/settings.py.


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

Inicie o serviço de banco de dados:


docker-compor up -d

Depois disso, inicialize o banco de dados:


python init_db.py

Estrutura do arquivo do projeto


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



Até agora, feito sem serializadores. Foi encontrado um projeto , mas existe uma versão antiga do Tortoise ORM.


Existem outras implementações de serializadores. Provavelmente, com eles, o desenvolvimento é idiomático e mais rápido. Precisa tentar. ORM conectado, agora precisamos adicionar serializadores. Ou talvez adicione mais renderizações?


Testes


Ainda não foi adicionado. De acordo com as condições da tarefa, os testes podem ser realizados, mas não são necessários.


Conclusão


Você também precisa adicionar suporte para perfis, artigos e muito mais. Todos são convidados ao projeto para glorificar seu nome por séculos e milênios. Dicas e comentários de desenvolvedores experientes são bem-vindos.

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


All Articles