RealWorld: aiohttp ، السلحفاة ORM

لا يوجد مثال لـ aiohttp على Real World ، وقررت أن أصنع واحدًا. يبدو أن المطورين ذوي الخبرة ليس لديهم وقت للقيام بذلك ، والمبتدئين في aiohttp لا يفهمون كيفية القيام بذلك بشكل صحيح. لقد بدأت في فعل ذلك مع Tortoise ORM. أثناء بدء المصادقة.


أريد أن أجعل هذا المشروع صحيحًا ، لذلك هناك الكثير من الأسئلة لمطوري aiohttp من ذوي الخبرة تحت الخفض.


تركيب المشروع


مخزن


استنساخ المستودع:


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

في التطوير ، استخدمت Python 3.8. تثبيت التبعيات:


تثبيت نقطة -r متطلبات. txt

تهيئة قاعدة البيانات:


بيثون init_db.py

نبدأ الخادم:


قناة بيثون م

يوجد في المستودع مجموعة Postman RealWorld.postman_collection.json . قم باستيراده إلى Postman ويمكنك تجربة واجهة برمجة التطبيقات الناتجة.


PostgreSQL


بشكل افتراضي ، يتم استخدام قاعدة بيانات SQLite.


لاستخدام PostrgeSQL ، تحتاج إلى تغيير متغير DB_URL في /conduit/settings.py.


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

ابدأ خدمة قاعدة البيانات:


إنشاء عامل الميناء -d

بعد ذلك ، قم بتهيئة قاعدة البيانات:


بيثون init_db.py

هيكل ملف المشروع


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



حتى الآن ، تم ذلك بدون التسلسل. وجدت مثل هذا المشروع ، ولكن هناك نسخة قديمة من Tortoise ORM.


هناك تطبيقات أخرى لمسلسل. على الأرجح ، معهم يكون التطور اصطلاحيًا وأسرع. تحتاج إلى محاولة. موصّل ORM ، الآن نحن بحاجة إلى إضافة متسلسلين. أو ربما إضافة المزيد من العروض؟


الاختبارات


لم يضاف بعد. وفقًا لشروط المهمة ، يمكن إجراء الاختبارات ، ولكنها غير مطلوبة.


استنتاج


تحتاج أيضًا إلى إضافة دعم للملفات الشخصية والمقالات وغير ذلك الكثير. الجميع مدعوون إلى المشروع لتمجيد اسمهم لقرون وألاف السنين. نرحب بالتلميحات والتعليقات من المطورين ذوي الخبرة.

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


All Articles