前面的篇章,我们搭建了django的rest api服务,那么现在,我们就需要对api来做权限限制,不能让随便一个人就可以访问api接口。一般api访问的权限限制,包括basic的验证,每次的请求头中,带有username和password,access_token验证,一般是sso生成的access_token,通过token可以拿到用户的info,请求的header里面带有authorization: "Bearer access_token"。还有jwt(json web token),请求的头中带有authorization: "JWT token"。这里,我们就采用jwt,来作为用户的权限验证。

首先,我们需要安装依赖包,django-allauth,这个库还是很强大的,集成了django自带的用户验证系统,还支持各种第三方的sso用户认证,有兴趣的可以研究一下(https://github.com/pennersr/django-allauth)。可以自定义用户登陆模板页面,添加google,wechat等等的其他社交账户认证。这里我就只支持rest api认证,所以还需要安装django-rest-auth,这个就是把系统认证导出了rest接口,可以通过api认证用户。如果需要支持json web token,我们还需要djangorestframework-jwt这个库。

requirements.txt

安装好之后,需要修改settings.py文件,enable 认证相关的配置。

installed app

settings.py

接下来我们自定义了一个用户profile,可以添加更多的field,比如用户的role,来做更多的角色的限制。

models.py

接着我们需要修改root urls文件,注册rest-auth的路由。

urls.py

最后,我们只需要在路由具体实现里面,给viewset添加认证和权限的classes就可以了。

这里的permission_classes,我们只是简单了添加是否认证的判断,如果api有不同的角色用户的话,还可以对用户的role来做判断,进一步限制不同角色的用户对api的权限访问。

最后我们访问docs页面,去调用todos列表接口看一下。

我们可以看到返回401提示用户没有认证。

接着,我们来认证用户,获取token,再次调用一下。

输入用户名密码,认证

返回token信息

输入token验证

带有token调用api,返回200成功。

到这,我们就对自己的api做了权限的限制。谢谢大家。

django 自定义权限_如何对django api做权限限制相关推荐

  1. java 共享内存获取写权限_跨进程访问共享内存的权限问题

    问:我在服务器上用 CreateFileMapping 创建了一段共享内存.让这个exe始终在服务器上跑. 同时,别的用户在客户端用IE访问服务器,将要查询的数据通过C#制作的网页提交上来,服务器得到 ...

  2. 怎么设置mysql 的权限_怎么设置SQL数据库用户权限

    一.操作步骤 首先进入数据库级别的[安全性]-[登录名]-[新建登录名] (图1:新建登录名) 2. 在[常规]选项卡中,如下图所示,创建登陆名,并设置默认的数据库. (图2:设置选项) 3. 在[用 ...

  3. service获取selinux权限_属性问题展开的selinux权限介绍

    从android5.0开始,强制开启了SELinux,对系统属性的访问权限也由selinux进行限制. SELinux非常繁杂,8.0开始的Treble Project后,为了实现system.ven ...

  4. 软件获取手机的ime权限_你手机上软件的权限请求,都要同意吗,会不会泄漏你的隐私?...

    生活中,在你使用各种手机软件的时候,不知道你有没有注意到,在软件第一次安装打开的时候,有大多数软件会弹出一个权限请求的弹框,显示出应用要请求获取什么权限以及使用这些权限的一些情况说明.我相信大多数人可 ...

  5. mysql修改导入导出权限_数据库导入导出与赋权限及建同义词

    1.数据库导入导出DMP文件(一般要以adm账号来执行) a)从正式库导出数据: exp sw_adm/swadm123@cwdevdb owner=sw_adm file=E:20121217cwd ...

  6. django模型查询_如何在Django中编写有效的视图,模型和查询

    django模型查询 I like Django. It's a well-considered and intuitive framework with a name I can pronounce ...

  7. python django怎么读_怎么读django

    Django(发音:[`dʒæŋɡəʊ]) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计.Django遵守BSD版 ...

  8. django文档_如何在django官方文档中快速找到需要的内容

    许多新手程序员发现Django文档内容非常庞大. 假设想学习如何为用户执行登录.看着很简单:登录是Django的核心功能.如果搜索" django登录"或搜索文档,则会看到一些选项 ...

  9. django构建网页_如何使用Django构建照片供稿

    django构建网页 by Ogundipe Samuel 由Ogundipe Samuel 如何使用Django构建照片供稿 (How to build a photo feed using Dja ...

最新文章

  1. 四十八、减少磁盘延迟时间的方法
  2. vue 多个click_vue中touch和click共存的解决方式
  3. 技术实践:大规模知识图谱预训练及电商应用
  4. Mysql日期和时间函数大全
  5. 芝麻信用很高,为什么贷款还是被拒了?
  6. java web 程序---javabean实例--登陆界面并显示用户名和密码
  7. oracle使用连接池,使用Oracle的数据连接池
  8. java executor spring_java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)
  9. 150分试卷c语言,连续5道C语言题目一共送150分啊,题目2.一个农场有头母牛,现 爱问知识人...
  10. php连接Access实例
  11. flex转html5插件,Flexbox使用向导-flex元素排列顺序
  12. 40页PPT勾画“互联网颠覆性思维”----诠释互联网思维
  13. 遗传算法 python_Python实现入门级遗传算法
  14. PHY寄存器驱动调试总结
  15. ss导航java宝典_ss导航绅士宝典app下载-ss导航绅士宝典百度网盘官方版下载v1.1.0-七度网...
  16. python爬取微信好友教程_Python爬取微信好友
  17. oracle Parallel模式-Parallel用法(/*+PARALLEL(n)*/)
  18. 《超大流量分布式系统架构解决方案-人人都是架构师2.0》读书笔记
  19. php页眉,FPDF页眉和页脚 - php
  20. Data-free量化

热门文章

  1. Docker 基础介绍及配置安装 [一]
  2. 12款很酷的使用大头照的国外名片设计作品
  3. [Usaco2016 Dec]Moocast
  4. C++中 vector(容器)的用法
  5. OO_2019_第一单元总结——表达式求导
  6. 『TensorFlow』分布式训练_其二_单机多GPU并行GPU模式设定
  7. clipboard.js在弹出框中无法复制的问题
  8. 2038: [2009国家集训队]小Z的袜子(hose) - BZOJ
  9. Shell排序(改良的插入排序)
  10. WAV格式中常见的压缩编码