0

在这里你可以看到用户模型及其方法

class User:

    def __init__(self, db, data, *kw):
        self.db = db
        self.username = data[0]
        self.pass_hash = argon2.argon2_hash(data[1], salt=b'salty salt')

    async def check_user(self, **kw):
        async with self.db.acquire() as conn:
            user = await conn.execute(users.select().where(users.c.username == self.username))
        return user

    async def create_user(self, **kw):
        user = await self.check_user()
        if not user:
            async with self.db.acquire() as conn:
                await conn.execute(
                    users.insert().values(username=self.username,
                                          pass_hash=self.pass_hash))
            result = 'Success'
        else:
            result = 'User exists'
        return result

有两个功能,第一个是检查用户是否存在于数据库中,第二个是添加一个新用户到数据库。所以主要问题是 create_user 函数工作正常,但如果我在那里添加一个 check_user,什么都不会发生。在下面查看我调用此函数的视图方法

async def signin(request):
    data = [request.rel_url.query['username'],
            request.rel_url.query['pass_hash']]

    user = User(request.app['db'], data)
    result = await user.create_user()
    if isinstance(result, ObjectId):
        return web.Response(content_type='application/json', text=convert_json(result))

有人可以告诉我有什么问题吗?日志是空的,我没有收到任何错误,但也没有任何反应。自由回答。感谢大家

4

1 回答 1

0

所以,主要问题是我需要做的就是更改查询并向 ResultProxy 对象添加一个属性,该对象在 check_user 中返回

    async def check_user(self, **kw):
        async with self.db.acquire() as conn:
            s = sa.select([users]).where(users.c.username == self.username)
            return await conn.execute(s)

    async def create_user(self, **kw):
        user = await self.check_user()
        if not user.rowcount:
            async with self.db.acquire() as conn:
                await conn.execute(
                    users.insert().values(username=self.username,
                                          pass_hash=self.pass_hash))
            result = 'Success'
        else:
            result = 'User exists'
        return result
于 2020-07-23T18:58:33.280 回答