django的DRF安装、认证类、跨域
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安装、认证类、跨域相关推荐
- 来吧学学.Net Core之登录认证与跨域资源使用
序言 学习core登录认证与跨域资源共享是越不过的砍,所以我在学习中同样也遇到啦这两个问题,今天我们就用示例来演示下使用下这2个技术点吧. 本篇主要内容如下: 1.展示一个登录认证的简单示例 2.跨域 ...
- Web API 实现JSONP或者安装配置Cors跨域
前言 照理来说本节也应该讲Web API原理,目前已经探讨完了比较底层的Web API消息处理管道以及Web Host寄宿管道,接下来应该要触及控制器.Action方法,以及过滤器.模型绑定等等,想想 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
阅读目录 一.Django请求生命周期: 二.WEB开发模式: 三.cbv源码分析: 四.认识RESTful 补充知识:跨域 五.基于原生django开发restful的接口 六.drf安装.使用.A ...
- Python django解决跨域请求的问题
解决方案 1.安装django-cors-headers pip3 install django-cors-headers 2.配置settings.py文件 INSTALLED_APPS = [.. ...
- Fiddler跨域调试及Django跨域处理
------·今天距2021年267天·------ 这是ITester软件测试小栈第109次推文 在上一篇Fiddler系列文章:Fiddler设置断点(一),主要介绍了通过Automatic Br ...
- 解决Django与Vue的跨域问题
使用django-cors-headers解決Django和vue跨域问题 利用Django作为后端,Vue作为前端,进行前后端结合(数据交互)时出现跨域问题,本文介绍后端解决跨域问题的方法,配置后无 ...
- 用CORS 解决vue.js django跨域调用
Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的 ...
- Vuex、axios以及跨域请求处理
一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同:1. V ...
- js 跨域访问问题解决方法
什么引起了ajax不能跨域请求的问题? ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告. 有什么完美的解决方案么 ...
- asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...
一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...
最新文章
- 第一次运行Spring Boot有感
- python if语句和循环语句
- python中scrapy的middleware是干嘛的_python爬虫常用之Scrapy 中间件
- Python报错:IndentationError: unindent does not match any outer indentation level解决办法
- 长大了,也弄丢了很多东西
- 题目1017:还是畅通工程(最小生成树初步应用)
- FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析
- js日期操作,某天的N天后,一个月后的日期
- 190602每日一句
- CentOs7下Zabbix安装教程——zabbix server安装
- 简单的markdown在线解析服务-pro
- Android流程图
- java图形界面的实验代码_GUI图形用户界面实验报告
- linux清理unbuntu无用空间,如何给Ubuntu系统清理垃圾
- 当大数据遇到保险:传统精算模型将被颠覆
- URAL 2037 Richness of binary words (回文子串,找规律)
- 影视广告创意与制作(四)
- Inpaint9.1最新网页版下载及inpaint怎么去水印教程
- 【java集合】ConcurrentHashMap源码分析
- ethz-asl Hand-Eye-Calibration 实验之hand_eye_calibration_batch_estimation模块
热门文章
- 求最大公约数不同算法的时间比较(辗转相除法,更相减损术等)
- win11安装MySQL5.7.43的问题清单
- kafka 的 ack 的三种机制
- 2022深圳城市人才趋势报告
- 油猴插件: AC-百度-重定向优化
- mysql status queries_MySQL_MySQL查询正在运行的SQL语句,通过status命令,查看Slow queries - phpStudy...
- 新手小白学JAVA Eclipse下载使用手册
- 英诺重明容错服务器320T安装centos7.6图文步骤超详细版
- LinkedIn增长揭秘:262亿美元的增长引擎是如何练成的?
- Latex,WPS公式编辑器,输入花体字母(在mathtype输入花体损失函数L)