RealWorld: aiohttp, Tortoise ORM

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.


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



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.

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


All Articles