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的浏览器都会使用这个策略.所谓同源是指,域名,协议, ...
随机推荐
- kali在执行 apt-get update 命令时报错的解决方法
报错内容: root@kali:~# apt-get updateGet:1 http://kali.mirror.garr.it/mirrors/kali kali-rolling InReleas ...
- 初始化HTML样式(转载)
方式一 ;; } body { background:#fff; color:#555; font-size:14px; font-family: Verdana, Arial, Helvetica, ...
- java8_api_正则表达式
正则表达式 什么是正则表达式 使用String类中的replaceAll方法 使用Pattern类编译正则表达式 使用Matcher类匹配正则表达式 什么是正则表达式 ...
- C#中使用EntityFramework(EF)生成实体进行存储过程的调用
在EF中使用定义对象模型的方式调用一个存储过程,这个存储过程返回的是一组包含两列的值.(ProjectName,Count) 下面是存储过程: CREATE procedure [dbo].[Pro_ ...
- 安装.net 服务时出现0x80131515错误的解决办法
使用InstallUtil.exe安装一个用.NET写的Windows服务时,报错了,错误信息如下: Exception occurred while initializing the install ...
- mysql循环插入千万级数据
mysql使用存储过程循环插入大量数据,简单的一条条循环插入,效率会很低,需要考虑批量插入. 测试准备: 1.建表: CREATE TABLE `mysql_genarate` ( `id` ) NO ...
- 2.NB-IoT及通信协议
NB-IoT 1.什么是NB-IoT? NB-IoT全称窄带物联网(Narrow Band IOT),构建于蜂窝网络,只消耗大约180KHz的带宽,可直接部署于GSM网络.UMTS网络或LTE网络,以 ...
- iptables禁止某个mac地址上网
iptables -I FORWARD -m mac --mac-source 60:14:B3:7D:6B:39 -j DROP 上面这条命令测试过是可行,禁止这个mac地址上网,马上禁止马上生 ...
- 使用shell进行etl数据验证
方法如下: 整理校验的类型,不同的类型配置文件不一样. 1:校验数据增量:需要设置表名,增量字段. 2:非法值校验:设置表名,条件,校验字段,合法值/非法值范围. 3:自定义校验:设置表名,校验名称, ...
- 最近想学Json,请问大家有没有什么好的Json教程介绍一下?
最近想学json,请问大家有没有什么好的Json教程介绍一下? 最近学完java的框架了,想了解一下json,可是找不到相关视频,请大家有这方面的Json教程好资料就介绍下啦,最后有网址链接啦. {} ...