drf框架之跨域问题的解决与缓存问题
什么是跨域问题呢:
1. 跨域问题:
CORS 跨域资源共享: 有简单请求 和非简单请求 简单请求:
只要符合如下两条,就是简单请求,否则则是非简单请求
(1)
请求方法是以下三种方法之一:
HEAD
GET
POST
(2)
HTTP的头信息不超出以下几种字段:
Accept
Accept - Language
Content - Language
Last - Event - ID
Content - Type:只限于三个值application / x - www - form - urlencoded、multipart / form - data、text / plain 简单请求只发一次请求
非见到你请求发两次:一次是OPTIONS预检请求,预检请求同意我发,我再发起第二次真实请求,一次是真实的请求 处理跨域问题(可以使用django-cors-headers 模块)
2. 如何处理?
可以自己处理: 创建一个文件:
第一步:
class MyMiddleware(MiddlewareMixin):
def process_response(self, request, response):
# 处理了简单请求
response['Access-Control-Allow-Origin'] = '*'
# 处理非简单请求
if request.method == 'OPTIONS':
response['Access-Control-Allow-Headers'] = '*'
# response['Access-Control-Allow-Methods']='PUT,PATCH'
response['Access-Control-Allow-Methods'] = '*' return response
3. 如何使用?
第二步: 在setting文件内
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
#处理跨域的中间件
'app01.mycsrf.MyMiddleware', #添加第一步写好的中间件配置信息 #总结 jason 数据就是非简单请求 put,delete 也是非简单请求
缓存问题
1. 缓存到文件的方法:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使用的引擎
'LOCATION': 'D:\lqz\cache', # 指定缓存的路径
'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
}
}
}
在settings中配置
2. 使用缓存:
-第二步:使用缓存
-使用单页面缓存(使用装饰器):
from django.views.decorators.cache import cache_page
@cache_page(5)
def cache_test(request):
print('走视图函数')
ctime=time.time()
return render(request,'index.html',locals())
3. 局部缓存在前端页面的处理:
-页面局部缓存
{% load cache %}
#传两个参数:第一个参数是超时时间,第二个参数是key值,唯一的标志#
{% cache 5 'ttt'%}
当前时间是:{{ ctime }}
{% endcache %}
前端html的处理
4.全站缓存的配置中间件:
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
#处理跨域的中间件
'app01.mycsrf.MyMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware'
] CACHE_MIDDLEWARE_SECONDS=5 #定义缓存的时间
在settings下配置如下
drf框架之跨域问题的解决与缓存问题的更多相关文章
- 解决使用elementUI框架el-upload跨域上传时session丢失问题
解决方法一: 1.使用elementUI框架el-upload跨域上传时,后端获取不到cookie,后端接口显示未登录,在添加了 with-credentials="true"后依 ...
- Django框架 之 跨域请求伪造
Django框架 之 跨域请求伪造 浏览目录 同源策略与Jsonp 同源策略 Jsonp jQuery对JSONP的实现 CORS 简介 两种请求 同源策略与Jsonp 同源策略 同源策略(Same ...
- vue+django分离开发的思想和跨域问题的解决
一.介绍 在前后端分离的开发过程中,会涉及到跨域的问题,比如本次个人使用的Django+vue的框架,在vue对Django进行响应,Django再将响应的数据返回给vue,vue在进行渲染,如果不设 ...
- Vue 项目中遇到的跨域问题及解决方法
原文:https://www.jb51.net/article/137278.htm 问题描述 前端 vue 框架,跨域问题后台加这段代码 header("Access-Control-Al ...
- SSM框架处理跨域问题
什么是跨域 跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.跨域的严格一点的定义是:只要 协议,域名,端口有任何一个 ...
- jquery ajax跨域的完美解决方法(jsonp方式)
ajax跨域请求的问题,JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式,接下来为大家详细介绍下客户端JQuery.ajax的调用代码 今天在项目中需要做远程数据加载 ...
- 如何实现vue前端跨域,proxyTable解决开发环境前端跨域问题
在开发环境与后端调试的时候难免会遇到跨域问题,很多人说跨域交给后端解决就好了. 其实不然,前端也有很多方法可以解决跨域,方便也快捷. 常见的有nginx转发.node代理. 在vue项目中常用的是pr ...
- AJAX跨域问题以及解决思路(更新中)
跨域的三大原因(同时满足) 浏览器限制 跨域 XHR请求 解决思路: 让浏览器不做限制,指定参数,让浏览器不做校验,但该方法不太合理,它需要每个人都去做改动. 不要发出XHR请求,这样就算是跨域,浏览 ...
- WebApi2跨域问题及解决办法
跨域问题产生的原因 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能.现在所有支持JavaScript的浏览器都会使用这个策略.所谓同源是指,域名,协议, ...
随机推荐
- 关于JS的一些案例,setInterval,动态图片
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- 15.1 打开文件时的提示(不是dos格式)去掉头文件
1.用ultraedit打开文件时,总提示不是DOS格式 2.把这个取消.dos格式只是用来在unix下读写内容的,此功能禁用即可.
- java web中分层MVC的意义
在web编程中,由于高内聚.低耦合的特点,需要将多个类实现多层,大致有以下几层:①entity,实体类,如user,role等,这些类里边包含了私有属性和公共的get.set方法这和数据库中的表相对应 ...
- HttpSimpleClient连接服务器
public class HttpSimpleClient { /** * 发送GET请求. */ static public HttpResult httpGet(String url, List& ...
- pc端布局的一点思考
编写pc端页面需要注意些什么? 1.自适应最小屏幕,在小屏幕上样式不能错乱. 在桌面屏幕各分辨率使用比例中可以看到各桌面分辨率的使用比例,日常pc端开发我们会考虑到适配1024宽度大小的屏幕. 对于管 ...
- 使用Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像. 一.基本结构 Dockerfile由一行行命令语句组成,并且支持以#开头的注释行. 一般而言,D ...
- Elasticsearch-6.7.0系列(二)ES集群安装与验证
准备3台centos7机器/虚拟机,每台都安装上elasticsearch6.7.0 ,安装过程参考我的另一篇博客<Elasticsearch-6.7.0系列(一)9200端口 .tar.gz版 ...
- 报错:Flink Could not resolve substitution to a value: ${akka.stream.materializer}
报错现象: Exception in thread "main" com.typesafe.config.ConfigException$UnresolvedSubstitutio ...
- 20175311 2018-2019-2 《Java程序设计》第四周学习总结
20175311 2018-2019-2 <Java程序设计>第4周学习总结 教材学习内容总结 这一周在上一周的基础上更进一步,主要学习了子类的继承.super关键字的用法含义.继承与多态 ...
- 使用Git Bash从Git上下载代码到本地以及上传代码到码云Git
前提是在码云上已经新建一个空的项目,可参考:https://www.cnblogs.com/babysbreath/p/9170455.html 1.新建一个目录,存放下载下来的项目,我在D盘新建了一 ...