Python django身份验证和密码重置

Python django身份验证和密码重置,python,django,api,authentication,Python,Django,Api,Authentication,因此,我目前正在从事一个web应用程序项目,并成功地实现了身份验证和密码确认 但我的问题是,我使用html模板完成了这项工作,现在要求我们必须使用api来开发我们的应用程序 现在,我对api还不熟悉,真的很困惑如何使用我构建的身份验证系统(因为我们必须为内置实现的类提供模板,而它们接受来自自身的值) 在仍然使用内置机制更改密码时,是否可以从代码隐藏中实际查看和管理注册用户?您可以使用内置的Django auth框架使用此通用视图 @login_required def change_passwo

因此,我目前正在从事一个web应用程序项目,并成功地实现了身份验证和密码确认

但我的问题是,我使用html模板完成了这项工作,现在要求我们必须使用api来开发我们的应用程序

现在,我对api还不熟悉,真的很困惑如何使用我构建的身份验证系统(因为我们必须为内置实现的类提供模板,而它们接受来自自身的值)


在仍然使用内置机制更改密码时,是否可以从代码隐藏中实际查看和管理注册用户?您可以使用内置的Django auth框架使用此通用视图

@login_required
def change_password(request):
    if request.method == "POST":
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            # Important to update the session otherwise user will have to login again
            update_session_auth_hash(request, user)
            # Server side alert
            print("Password changed for {0}".format(user.username))
            return redirect('/index/')
        else:
            print(form.errors)
    else:
        form = PasswordChangeForm(request.user)
    return render(request, 'website/changepassword.html', {'form': form})

您需要使用djangorestframework,并使用decorator
@apiview(['GET','POST'])
来创建RestAPI

您可以使用djangorest框架中提供的令牌身份验证。请参阅文档中的内容:

令牌身份验证

此身份验证方案使用简单的基于令牌的HTTP身份验证方案。令牌身份验证适用于客户端-服务器设置,如本机桌面和移动客户端

要使用TokenAuthentication方案,您需要将身份验证类配置为包括TokenAuthentication,并在已安装的应用程序设置中另外包括rest_framework.authtoken:

INSTALLED_APPS = (
...
'rest_framework.authtoken'
)

注意:请确保在更改设置后运行manage.py migrate。rest_framework.authtoken应用程序提供Django数据库迁移

您还需要为您的用户创建令牌

from rest_framework.authtoken.models import Token

token = Token.objects.create(user=...)
print token.key
对于要进行身份验证的客户端,令牌密钥应包含在授权HTTP头中。键的前缀应该是字符串文字“Token”,两个字符串之间用空格分隔。例如:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
WWW-Authenticate: Token
curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'
注意:如果您想在头中使用不同的关键字,例如Bearer,只需将TokenAuthentication子类化并设置keyword类变量

如果成功进行身份验证,TokenAuthentication将提供以下凭据

  • request.user将是Django用户实例
  • request.auth将是rest\u framework.authtoken.models.Token实例
被拒绝权限的未经身份验证的响应将导致HTTP 401未经授权的响应,并带有相应的WWW Authenticate标头。例如:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
WWW-Authenticate: Token
curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'
curl命令行工具对于测试令牌认证的API可能很有用。例如:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
WWW-Authenticate: Token
curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'
注意:如果您在生产中使用令牌身份验证,则必须确保您的API仅通过https可用


来源:

嘿,拉胡尔,你可以使用Djangorest框架。看一下医生。它使用了基于令牌的身份验证。这里您再次使用了模板。在我的例子中,web应用程序的前端正在由其他人开发,我需要开发一个api并提供给他们,他们可以通过它调用他们需要的任何功能