前言

现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求。
本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token。
环境准备:
python 3.6
django 2.1.2

TokenAuthentication

django rest framework权限和认证有四种方式:

  • BasicAuthentication   此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名。

    基本身份验证通常仅适用于测试

  • TokenAuthentication  此身份验证方案使用基于令牌的简单HTTP身份验证方案。

    令牌认证适用于客户端 - 服务器设置,例如本机桌面和移动客户端。

  • SessionAuthentication 此身份验证方案使用Django的默认会话后端进行身份验证。

    会话身份验证适用于与您的网站在同一会话上下文中运行的AJAX客户端。

  • RemoteUserAuthentication 此身份验证方案允许您将身份验证委派给Web服务器,该服务器设置REMOTE_USER 环境变量。

本篇讲TokenAuthentication这种认证方式,先安装对应的模块

pip install djangorestframework

在setting.py中加入配置参数

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

添加REST_FRAMEWORK项,rest_framework.authentication.TokenAuthentication上面说的第三种token认证的方式。

REST_FRAMEWORK = {    'DEFAULT_AUTHENTICATION_CLASSES': (        'rest_framework.authentication.BasicAuthentication',        'rest_framework.authentication.SessionAuthentication',        'rest_framework.authentication.TokenAuthentication',  # token认证    )}

同步数据库,生成authtoken_token表

python manage.py migrate

执行完成后,数据库里面就会多一张authtoken_token表

登录生成token案例

登录可以直接用django自带的User表,所以不需要重新设计表了,登录的账号就是User表的数据,先准备几个登录的账号,比如我的登录账号是test,密码是123456

views.py编辑登录的视图函数

# views.pyfrom django.shortcuts import renderfrom django.http import JsonResponsefrom django.shortcuts import HttpResponsefrom rest_framework.authtoken.models import Tokenfrom django.contrib import authfrom rest_framework.views import APIView

# 作者:上海-悠悠,QQ交流群:750815713

class LoginViewSet(APIView):    '''登录方法'''

    def post(self, request, *args, **kwargs):        username = request.data.get('username')        password = request.data.get('password')        user = auth.authenticate(username=username, password=password)        if not user:            return HttpResponse({"code": 0,                                "msg": "用户名或密码不对!"})        # 删除原有的Token        old_token = Token.objects.filter(user=user)        old_token.delete()        # 创建新的Token        token = Token.objects.create(user=user)        return JsonResponse({"code": 0,                             "msg": "login success!",                             "username": user.username,                             "token": token.key})

urls.py设置访问地址

# urls.pyfrom apiapp import viewsfrom django.conf.urls import url

# 作者:上海悠悠,QQ交流群:750815713

urlpatterns = [    url(r'^api/v1/login/$', views.LoginViewSet.as_view()),]

测试登录获取token

接着测试登录返回token的接口,使用post请求,请求类型Content-Type: application/json

测试结果

登录成功后,token会写入authtoken_token表里面

其它的接口需要登录之后才能访问,也就是token用户认证下篇再讲

c#生成token访问的接口_python测试开发django60.token登录(TokenAuthentication)相关推荐

  1. c++ websocket客户端_python测试开发django81.dwebsocket实现websocket

    前言 HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息. WebSocket 协议它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是 ...

  2. ajax get请求_python测试开发django50.jquery发送Ajax请求(get)

    前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...

  3. python开发面试题目_Python测试开发面试笔试题

    Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...

  4. token 微信access 过期_微信开发ACCESS TOKEN 过期失效解决方案

    微信开发-ACCESS TOKEN 过期失效解决方案 起因:因为access_token的重要性,开发过微信的都知道,但是他有自己的生命周期,官方解释为:"有效期为7200秒",一 ...

  5. feign调用多个服务_spring cloud各个微服务之间如何相互调用(Feign、Feign带token访问服务接口)...

    1.首先先看什么是Feign. 2.若其他服务的接口未做权限处理,参照上文第1点的博文即可. 3.若其他服务的接口做了权限的处理(例如OAuth 2)时该如何访问? a.有做权限处理的服务接口直接调用 ...

  6. select三级联动 怎么删除前一个的_python测试开发django57.xadmin选项二级联动

    前言 当我们选择项目分类的时候,一个项目下关联多个模块,同时有这两个选项框的时候,需要实现选中一个项目,模块里面自动删除出该项目下的模块,如下图这种 解决基本思路: 1.写个jqeury脚本监听cha ...

  7. python测试开发面试题_python测试开发面试之深浅拷贝

    先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等" ...

  8. python 怎么把 写好的代码 放到服务器执行_python测试开发django(1)--开始Hello World! - 星空6...

    前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pytho ...

  9. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证

    前言 在开发一个网站时,经常会用到用户的注册和登陆相关的账号管理功能,auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. 像用户注册.用户登录.用户认证.注销 ...

最新文章

  1. 2021年春季学期-信号与系统-第七次作业参考答案-第六小题
  2. 编程之美-阶乘方法整理
  3. Java 中的四种引用及垃圾回收策略
  4. 论文盘点:基于图卷积GNN的多目标跟踪算法解析
  5. 【Luogu】【关卡2-2】交叉模拟(2017年10月)
  6. android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上...
  7. 博士生找工作的真相!就问一声:你是否足够强大?
  8. DML和DQL 总结
  9. 解决办法:cv::randn(cv::_InputOutputArray const, cv::_InputArray const, cv::_InputArray const)’未定义的引用
  10. 【C语言】之冒泡排序法(详解)
  11. traceroute、tracert服务的工作原理
  12. python tkinter 窗口 隐藏 显示_【Python GUI】隐藏窗体和弹窗窗体的探索
  13. myeclipse项目导入eclipse在Web项目下的WebRoot和WebContent
  14. 一个简单移动页面ionic打包成app
  15. DES算法的介绍和实现(转的,其实3des一样的原理就是加密解密加密而已)
  16. 两个字符串的最长公共子串(C++)
  17. 如何在 Excel 图表中添加或删除次坐标轴?
  18. 【技术干货】跨境茶话会第4期丨响应式编程的应用
  19. 解决vscode红色波浪线的ts报错:找不到模块“store” ts(2307),不识别@别名路径
  20. shell在xcode中涉及到的关键字

热门文章

  1. .net core websocket
  2. 存储管理工具StorageExplorer的基本使用
  3. 170308、oracle查看被锁的表和解锁
  4. 单调队列练习之广告印刷
  5. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型
  6. 执行sql报错:Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in
  7. static用法报错解决:cannot declare member function to have static linkage [-fpermissive]
  8. Android Studio禁止混淆JNI代码
  9. Android写log到文件模版
  10. Android系统Audio框架介绍(一)