在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.
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,现在我们需要添加序列化器。或者添加更多渲染器?
测验
尚未添加。根据任务的条件,可以进行测试,但不是必需的。
结论
您还需要添加对配置文件,文章等的支持。每个人都被邀请参加这个项目,以美化他们的名字数百年和千年。欢迎有经验的开发人员提供提示和意见。