لا يوجد مثال لـ 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.
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 . , .
حتى الآن ، تم ذلك بدون التسلسل. وجدت مثل هذا المشروع ، ولكن هناك نسخة قديمة من Tortoise ORM.
هناك تطبيقات أخرى لمسلسل. على الأرجح ، معهم يكون التطور اصطلاحيًا وأسرع. تحتاج إلى محاولة. موصّل ORM ، الآن نحن بحاجة إلى إضافة متسلسلين. أو ربما إضافة المزيد من العروض؟
الاختبارات
لم يضاف بعد. وفقًا لشروط المهمة ، يمكن إجراء الاختبارات ، ولكنها غير مطلوبة.
استنتاج
تحتاج أيضًا إلى إضافة دعم للملفات الشخصية والمقالات وغير ذلك الكثير. الجميع مدعوون إلى المشروع لتمجيد اسمهم لقرون وألاف السنين. نرحب بالتلميحات والتعليقات من المطورين ذوي الخبرة.