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

来源:4-4 实现登录功能

Clown08

2019-03-21

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

写回答

3回答

咚咚呛

2019-03-23

  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
1
Clown08
非常感谢!
2019-03-24
共1条回复

咚咚呛

2019-03-21

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

1
1
Clown08
好的,老师
2019-03-22
共1条回复

慕瓜1488005

2019-04-06

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

0
1
咚咚呛
这是Django Rest Framework框架的相关内容,作为拓展可以了解一下。
2019-04-06
共1条回复

Django+小程序技术打造微信小程序助手

0到1完整项目实战过程,是难得的Django+小程序全栈项目体验。

991 学习 · 507 问题

查看课程