请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何使用Django的rest-framework来实现用户登陆

老师,我想实现一个基于Django的rest-framework实现用户登录的一个api,用的是自建的用户表而不是使用微信的openID,能介绍以下如何设计这个api的思路吗?
还有如何实现保持用户登陆的状态???
本人小白,自己在看官方文档的时候也理不太清具体的思路,还望老师能指点一下

正在回答

3回答

  1. 首先整理一些业务逻辑,可参考课程相关的内容,大致有:登录、注销、过期重新登录这个几个阶段。如果是自建用户表,那还包括注册的阶段,注册的阶段也非常重要。

  2. 注册阶段需要完成以下逻辑。

    1. 用户名判重

    2. 用户信息传输

    3. 密码加密

  3. 登录阶段需要完成以下逻辑。

    1. 用户名、密码校验

    2. 登录态保存

  4. 注销、过期重新登录阶段和课程内容相似,不做展开。

  5. 接着设计相关API,以下使用POST方法

    1. 注册:/apiv/v1/register

    2. 登录:/api/v1/login

    3. 注销:/api/v1/logout 

  6. 最后重点说明登录的过程,我们使用DRF框架的Token模块完成登录过程。

    1. 预登录态:获取用户的用户名和密码,构建POST数据,如:

      1. username: myusername

      2. password: mypassword

    2. 前端请求:通过API将POST数据发送到后台:django-rest-framework

    3. 后端处理请求:

      1. 将前端传递过来的用户数据校验是否合法,如果合法,将其构建成Django框架里面的User对象,User的路径如下,自行传递参数进行构建即可。

        from django.contrib.auth.models import User

      2. 将生成的user实例使用Token模块生成唯一Token

        token = Token.objects.get_or_create(user=user)

        生成的Token长这个样子的:{ 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' }

      3. 将token和相关登录的数据返回,如:

        { "token": "xxx", "username": "xxx"}

    4. 前端受到后端返回的结果,需要将返回的token存储起来,在下次请求时,构建如下的Header(这个Header的Key是指定的哦,不能更改,否则Token模块无法识别)

      Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

    5. 后端在接收到包含Autuorization的Header的请求的时候,就会自动转化为相应的user,可通过request.user来获取到这个用户。

这样就完成用户登录的整一个过程了,其实和课程第四章的内容也非常类似,在DRF框架里面,如果使用Token模块鉴权,关键是用户转化为Token的过程。可以根据以上流程细化每一个部分的实现,就能完成相关功能啦。

希望对同学有所帮助哦。

2 回复 有任何疑惑可以回复我~
  • 提问者 Clown08 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-03-24 10:39:13
咚咚呛 2019-03-21 21:42:21

这个问题有点大,我周末有时间整理一下哈

1 回复 有任何疑惑可以回复我~
  • 提问者 Clown08 #1
    好的,老师
    回复 有任何疑惑可以回复我~ 2019-03-22 09:52:59
慕瓜1488005 2019-04-06 21:58:14

请问这个方法是不是就代表用django自带的用户管理?

0 回复 有任何疑惑可以回复我~
  • 这是Django Rest Framework框架的相关内容,作为拓展可以了解一下。
    回复 有任何疑惑可以回复我~ 2019-04-06 22:02:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信