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.
cors = aiohttp_cors.setup(app, defaults={
"*": aiohttp_cors.ResourceOptions(
allow_credentials=True,
expose_headers="*",
allow_headers="*",
)
})
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.