Tidak ada contoh untuk aiohttp di Dunia Nyata , dan saya memutuskan untuk membuatnya. Pengembang berpengalaman, tampaknya, tidak punya waktu untuk melakukan ini, dan pemula di aiohttp tidak mengerti bagaimana melakukannya dengan benar. Saya mulai melakukannya dengan Tortoise ORM. Sementara mulai melakukan otentikasi.
Saya ingin membuat proyek ini benar, jadi ada banyak pertanyaan untuk pengembang aiohttp berpengalaman di bawah potongan.
Instalasi Proyek
Gudang
Kloning repositori:
git clone git@github.com: nomhoi / aiohttp-realworld-example-app.git
Dalam pengembangan, saya menggunakan Python 3.8. Instal dependensi:
pip install -r requirement.txt
Inisialisasi basis data:
python init_db.py
Kami memulai server:
saluran python -m
Di repositori ada koleksi Postman, RealWorld.postman_collection.json . Impor ke tukang pos dan Anda dapat mencoba API yang dihasilkan.
PostgreSQL
Secara default, database SQLite digunakan.
Untuk menggunakan PostrgeSQL, Anda perlu mengubah variabel DB_URL di /conduit/settings.py.
DB_URL = "postgres: // postgres: postgres@0.0.0.0: 5432 / postgres"
Mulai layanan basis data:
docker-compose up -d
Setelah itu, inisialisasi basis data:
python init_db.py
Struktur file proyek
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 . , .
Sejauh ini, dilakukan tanpa serialis. Menemukan proyek seperti itu , tetapi ada versi lama dari Tortoise ORM.
Ada implementasi serialis lain. Mungkin, bersama mereka perkembangannya idiomatis dan lebih cepat. Perlu dicoba. ORM doyan, sekarang kita perlu menambahkan serializers. Atau mungkin menambahkan lebih banyak render?
Tes
Belum ditambahkan. Sesuai dengan kondisi tugas, tes dapat dilakukan, tetapi tidak diperlukan.
Kesimpulan
Anda juga perlu menambahkan dukungan untuk profil, artikel, dan banyak lagi. Setiap orang diundang ke proyek untuk memuliakan nama mereka selama berabad-abad dan ribuan tahun. Petunjuk dan komentar dari pengembang berpengalaman dipersilakan.