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