Python日记| #12。选择颜色:代币身份验证
#spanish #python #django #开发日志

django的身份验证米德已经与框架本身合并,当我们启动时:

python manage.py迁移

允许用户管理的表被迁移。这解决了大部分会议工作,这是非常感谢的。

我们开始做吧

有一个抽象用户类,我们可以继承来生成自己的自定义用户并添加所需的字段。目前,我将在没有属性的情况下组装它,因此,如果将来我们需要向用户添加特殊信息,我们已经生成了类。

在Models.py中我声明新用户模型:

from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    pass

然后在设置中。

AUTH_USER_MODEL = 'api.User'

迁移以及执行时,他告诉我:

ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'api.user', but app 'api' doesn't provide model 'user'.
The field api.Vote.user was declared with a lazy reference to 'api.user', but app 'api' doesn't provide model 'user'.

我需要声明投票,该投票具有用户的foraneo密钥,这是我的用户,而不是Django模块的键。问题是迁移已经与以前的关系进行了,因此不会将它们带到我身上。

我删除我的sqlite3.db文件并用迁移重新创建它,以便django了解与自定义用户的新关系。

auth token y auth用户

此时,我已经有一个个性化的用户,以及Django身份验证实施。现在,我将在Views.py上构建登录端点,并且将其与DRF随附的auth令牌组件相结合:

@api_view(['POST'])
def user_auth(request):
    username = request.data.get('username')
    password = request.data.get('password')

    if not username or not password:
        return Response({'error': 'Se debe indicar usuario y contraseña'}, status=status.HTTP_204_NO_CONTENT)

    user = authenticate(request, username=username, password=password)
    if user is None:
        return Response({'error': 'El usuario o la contraseña son incorrectos'}, status=status.HTTP_400_BAD_REQUEST)

    token, created = Token.objects.get_or_create(user=user)
    return Response({'token': token.key}, status=status.HTTP_200_OK)

然后我在urls.py上定义路线:

urlpatterns += [
    path('auth', user_auth, name='api-auth')
]

to to我通过包含用户和密码的JSON通过“ Post/api/auth”访问的所有内容。

但是,我的观点对用户_auth做什么?低音进行以下操作:

  • 请请求用户并通过。
  • 如果这些值不存在,请返回错误。
  • 然后,使用身份验证功能运行登录过程。
  • 如果登录正确,请致电令牌模型的整个get_or_create,以前因导入 authtoken
  • 。 迁移
  • 最终返回这个令牌,这将帮助我们维持会话并告诉API。

我们将在Postman中尝试使用以前指示的路线,并具有这样的JSON机构:

{
 "username": "admin",
 "password": "123"
}

并将返回以下内容:

Postman POST

结论

也许令牌的身份验证似乎是不必要的,因为我们不将其应用于任何端点,但是在下一章中,他们会看到此简单字符串的功能,并且会影响我们的请求对象。

我们在接下来的!

中看到我们