真实世界:aiohttp,Tortoise ORM

Real World没有aiohttp的示例,因此我决定制作一个。看来,经验丰富的开发人员没有时间这样做,并且aiohttp的初学者不了解如何正确地做到这一点。我是从Tortoise ORM开始的。同时开始进行身份验证。


我想把这个项目做对,所以有经验的aiohttp开发人员面临很多问题。


项目安装


资料库


克隆存储库:


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

在开发中,我使用了Python 3.8。安装依赖项:


点安装-r requirements.txt

初始化数据库:


python init_db.py

我们启动服务器:


python -m管道

在存储库中,有一个Postman集合RealWorld.postman_collection.json将其导入Postman,您可以尝试生成的API。


PostgreSQL的


默认情况下,使用SQLite数据库。


要使用PostrgeSQL,您需要在/conduit/settings.py中更改DB_URL变量。


DB_URL =“ postgres:// postgres:postgres@0.0.0.0:5432 / postgres”

启动数据库服务:


docker-compose up -d

之后,初始化数据库:


python 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