1、drf需要djnago版本在2.2,python版本在3.5上

卸载django包:

pip uninstall django

安装django

pip install django==2.2.10
# 国外网络慢,换国内源安装
pip install django=2.2.10 https://pypi.douban.com/simple

2、安装DRF

# 在项目的terminal中,安装
pip install djangorestframework
# 国外网络慢,可以换成国内的源
pip install djangorestframework -i https://pypi.douban.com/simple

3、安装成功以后,要进行注册(跟应用的注册一样),这个是三方包

进入到项目的配置文件中:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','rest_framework',#注册drf
]

4、安装django的jwt

安装:pip install djangorestframework-jwt https://pypi.douban.com/simple

1、settings.py注册到app中

INSTALLED_APPS = [
        ...
        'rest_framework_jwt',
        ...
    ]

在配置文件中写入:配置过期时间

#2、配置

import datetime
JWT_AUTH = {
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),

    'JWT_AUTH_HEADER_PREFIX': 'JWT', #前缀需要家jwt
}

在应用内,创建auth.py,里面写认证类的解析过程:

前端携带token过来,进行认证,自己写认证:auth.pyfrom rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from rest_framework_jwt.serializers import jwt_decode_handler,jwt_get_username_from_payload
import jwt
class MyJWTAuthentication(BaseAuthentication):#重写authenticate方法def authenticate(self, request):#前端是将token通过http请求头发送过来,且AUTHORIZATION:tokentoken = request.META.get('HTTP_AUTHORIZATION')if token:#jwt通过了通过三段tokken,取出payload的方法,并且有校验功能try:payload = jwt_decode_handler(token)username = payload.get('username')return (username,token)#返回值必须是元组#通过认证的视图,可以通过request.user 拿到这里return的元组的第一个元素,#request.auth 拿到的return的元组的第二个元素except jwt.ExpiredSignature:msg = 'token过期'raise AuthenticationFailed(msg)except jwt.DecodeError:msg='toke非法'raise AuthenticationFailed(msg)except jwt.InvalidTokenError:msg = '用户非法'raise AuthenticationFailed(msg)except Exception as e:msg=str(e)raise AuthenticationFailed(msg)raise AuthenticationFailed('你没有携带认证信息,请携带token')

在登陆视图生成token返回给浏览器保存:

from rest_framework.viewsets import ViewSet
#获取token​
class UserView(ViewSet):#datail=True的时候,查询字符串携带pk@action(methods=['POST'],detail=False)def login(self,request,*args,**kwargs):username = request.data.get('username')password = request.data.get('password')user = models.User.objects.filter(username=username).first()ret = user.check_password(password)if ret:token = self._get_token(user)return  ReSponse(data={'token':token,'username':username},status=200)else:return ReSponse(status=400,data={'error':'用户名或密码错误'})def _get_token(self,user):from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler#传递用户对象,获取tokenpayload = jwt_payload_handler(user)token = jwt_encode_handler(payload)return token

认证类的全局使用和局部使用:

3、全局配置:在settings.py下
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        #这个是我们自己写的认证类所在的位置,到类名就可以
        'studentSystemt.apps.user.authen.MyJWTAuthentication'
    ],
}

局部配置:
在视图类中添加:
class Home():
     authentication_classes = [authen.MyJWTAuthentication]

配置全局使用:

1、在视图中authentication_classes = [] 实现局部禁用

5、在django中解决跨域问题

安装:

pip install django-cors-headers  https://pypi.douban.com/simple

在配置文件中书写

INSTALLED_APPS = [
......
'corsheaders',
]
......
MIDDLEWARE = [
......
'corsheaders.middleware.CorsMiddleware',
]
# 添加跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# 添加白名单
CORS_ORIGIN_WHITELIST = ('http://127.0.0.1:8080','http://localhost:8080',  # 凡是出现在白名单中的域名,都可以访问后端接口
)
# 添加跨域请求允许的请求方式
CORS_ALLOW_METHODS = ('DELETE','GET','OPTIONS','PATCH','POST','PUT','VIEW',
)
# 添加跨域请求允许的请求头类型
CORS_ALLOW_HEADERS = ('XMLHttpRequest','X_FILENAME','accept-encoding','authorization','content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with','Pragma',
)

django的DRF安装、认证类、跨域相关推荐

  1. 来吧学学.Net Core之登录认证与跨域资源使用

    序言 学习core登录认证与跨域资源共享是越不过的砍,所以我在学习中同样也遇到啦这两个问题,今天我们就用示例来演示下使用下这2个技术点吧. 本篇主要内容如下: 1.展示一个登录认证的简单示例 2.跨域 ...

  2. Web API 实现JSONP或者安装配置Cors跨域

    前言 照理来说本节也应该讲Web API原理,目前已经探讨完了比较底层的Web API消息处理管道以及Web Host寄宿管道,接下来应该要触及控制器.Action方法,以及过滤器.模型绑定等等,想想 ...

  3. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    阅读目录 一.Django请求生命周期: 二.WEB开发模式: 三.cbv源码分析: 四.认识RESTful 补充知识:跨域 五.基于原生django开发restful的接口 六.drf安装.使用.A ...

  4. Python django解决跨域请求的问题

    解决方案 1.安装django-cors-headers pip3 install django-cors-headers 2.配置settings.py文件 INSTALLED_APPS = [.. ...

  5. Fiddler跨域调试及Django跨域处理

    ------·今天距2021年267天·------ 这是ITester软件测试小栈第109次推文 在上一篇Fiddler系列文章:Fiddler设置断点(一),主要介绍了通过Automatic Br ...

  6. 解决Django与Vue的跨域问题

    使用django-cors-headers解決Django和vue跨域问题 利用Django作为后端,Vue作为前端,进行前后端结合(数据交互)时出现跨域问题,本文介绍后端解决跨域问题的方法,配置后无 ...

  7. 用CORS 解决vue.js django跨域调用

    Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的 ...

  8. Vuex、axios以及跨域请求处理

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同:1. V ...

  9. js 跨域访问问题解决方法

    什么引起了ajax不能跨域请求的问题? ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告. 有什么完美的解决方案么 ...

  10. asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

    一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...

最新文章

  1. 第一次运行Spring Boot有感
  2. python if语句和循环语句
  3. python中scrapy的middleware是干嘛的_python爬虫常用之Scrapy 中间件
  4. Python报错:IndentationError: unindent does not match any outer indentation level解决办法
  5. 长大了,也弄丢了很多东西
  6. 题目1017:还是畅通工程(最小生成树初步应用)
  7. FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析
  8. js日期操作,某天的N天后,一个月后的日期
  9. 190602每日一句
  10. CentOs7下Zabbix安装教程——zabbix server安装
  11. 简单的markdown在线解析服务-pro
  12. Android流程图
  13. java图形界面的实验代码_GUI图形用户界面实验报告
  14. linux清理unbuntu无用空间,如何给Ubuntu系统清理垃圾
  15. 当大数据遇到保险:传统精算模型将被颠覆
  16. URAL 2037 Richness of binary words (回文子串,找规律)
  17. 影视广告创意与制作(四)
  18. Inpaint9.1最新网页版下载及inpaint怎么去水印教程
  19. 【java集合】ConcurrentHashMap源码分析
  20. ethz-asl Hand-Eye-Calibration 实验之hand_eye_calibration_batch_estimation模块

热门文章

  1. 求最大公约数不同算法的时间比较(辗转相除法,更相减损术等)
  2. win11安装MySQL5.7.43的问题清单
  3. kafka 的 ack 的三种机制
  4. 2022深圳城市人才趋势报告
  5. 油猴插件: AC-百度-重定向优化
  6. mysql status queries_MySQL_MySQL查询正在运行的SQL语句,通过status命令,查看Slow queries - phpStudy...
  7. 新手小白学JAVA Eclipse下载使用手册
  8. 英诺重明容错服务器320T安装centos7.6图文步骤超详细版
  9. LinkedIn增长揭秘:262亿美元的增长引擎是如何练成的?
  10. Latex,WPS公式编辑器,输入花体字母(在mathtype输入花体损失函数L)