drf版本控制 和django缓存,跨域问题,
drf版本控制
基于url的get传参方式
REST_FRAMEWORK={
# "DEFAULT_AUTHENTICATION_CLASSES":["app01.auth.AuthLogin",],
# "DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer'],
# "DEFAULT_THROTTLE_CLASSES":["app01.auth.VisitThrottle"],
'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser'],
'DEFAULT_THROTTLE_RATES': {
'luffy': '3/mmmmmm'
},
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
基于url的正则方式
url(r'^(?P<version>[v1|v2]+)/publishs/', views.PublishView.as_view()),
django缓存
CACHES = {
'default': {
# 1. MemCache 基于MemCache的缓存
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 'LOCATION': '127.0.0.1:11211', # 2. DB Cache 基于数据库的缓存
# 'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
# 'LOCATION': 'my_cache_table', # 3. Filesystem Cache 基于文件的缓存
# 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
# 'LOCATION': '/var/tmp/django_cache', # 4. Local Mem Cache 基于内存的缓存
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'backend-cache'
}
} import os
import time
import django from django.core.cache import cache os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
django.setup() def basic_use():
s = 'Hello World, Hello Django Cache.'
cache.set('key', s)
cache_result = cache.get('key')
print(cache_result) s2 = 'Hello World, Hello Django Timeout Cache.'
cache.set('key2', s2, 5) #5是超时时间
cache_result = cache.get('key2')
print(cache_result) time.sleep(5) #5秒后就查不到了
cache_result = cache.get('key2')
print(cache_result)
pass if __name__ == '__main__':
basic_use() #实例
# 星座运势
def constellation(request):
data = []
if already_authorized(request):
user = get_user(request)
constellations = json.loads(user.focus_constellations)
else:
constellations = all_constellations
for c in constellations:
result = cache.get(c)
if not result:
result = thirdparty.juhe.constellation(c)
timeout = timeutil.get_day_left_in_second()
cache.set(c, result, timeout)
logger.info("set cache. key=[%s], value=[%s], timeout=[%d]" %(c, result, timeout))
data.append(result) response = CommonResponseMixin.wrap_json_response(data=data, code=ReturnCode.SUCCESS)
return JsonResponse(response, safe=False)
settings:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使用的引擎
'LOCATION': r'D:\lqz\vue', # 指定缓存的路径
'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
}
}
}
views:
from django.shortcuts import render,HttpResponse # Create your views here.
from django.views.decorators.cache import cache_page
import time
# 单页面缓存缓存5秒
# @cache_page(20)
def test(request):
print('我来了')
ctime=time.time() return render(request,'test.html',locals())
templates:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="/static/jquery-3.3.1.js"></script>
<title>Title</title>
</head>
<body>
不缓存的
{{ ctime }}
<br>
缓存的的
{#{% load cache %}#}
{#第一个参数是超时时间,缓存时间,第二个参数是key值,别名#}
{#{% cache 10 'test' %}#}
{# {{ ctime }}#}
{#{% endcache %}#}
<button id="btn">点我发请求</button>
</body> <script>
$("#btn").click(function () {
$.ajax({
url:'http://127.0.0.1:8000/v1/publishs/',
type:'get',
{# type:'delete',#}
{# type:'put',#}
{# contentType:'application/json',#}
{# data:JSON.stringify({'name':'lqz'}),#}
success:function (data) {
console.log(data)
}
})
}) </script>
</html>
跨域问题
from django.utils.deprecation import MiddlewareMixin
class CORSMiddle(MiddlewareMixin):
def process_response(self,request,response):
response['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8001'
if request.method == 'OPTIONS':
response['Access-Control-Allow-Methods'] = 'PUT,DELETE'
response['Access-Control-Allow-Headers']='Content-Type'
return response
drf版本控制 和django缓存,跨域问题,的更多相关文章
- DRF序列化、认证、跨域问题
初级 #models.py from django.db import models class User(models.Model): user = models.CharField(max_len ...
- django允许跨域请求配置
django允许跨域请求配置 下载corsheader pip install django-cors-headers 修改setting.py中配置 在INSTALLED_APPS中增加corshe ...
- Django 处理跨域的配置、前台处理ajax
一. Django处理跨域 跨域的处理方式有很多,使用最多的就是CORS(跨域资源共享),接下来大致提一下django中处理跨域的配置. 首先安装django-cors-headers模块: pip ...
- Django cors跨域问题
Django cors跨域问题 前后端分离项目中的跨域问题 即同源策略 同源策略:同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器 ...
- 版本控制,django缓存,跨域问题解决
复习 分页: 1. 简单分页 2. 偏移分页 3. 加密分页 解析器:客户处理前端提交来的数据 urlencode: body体中的数据格式: key=value& formdata编码:为区 ...
- Django drf:手撸自定义跨域
项目需求: 1.用域名8000向8001发送请求,用django框架解决跨域问题 2.用上自定义中间件配置,支持get.post.put.detele和非简单请求 3.支持版本控制 4.在settin ...
- Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)
一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...
- django中的缓存 跨域问题(同源策略)
django缓存机制 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作 ...
- django restframework 跨域访问
场景介绍: 在Django开发过程中,使用前后端分离设计的站点越来越多,如Django+VUE.Django+Angular.在使用DjangoRestFramework开发API的过程中,由于前端站 ...
随机推荐
- 洛谷P3957 跳房子(Noip2017普及组 T4)
今天我们的考试就考到了这道题,在考场上就压根没有思路,我知道它是一道dp的题,但因为太弱还是写不出来. 下来评讲的时候知道了一些思路,是dp加上二分查找的方式,还能够用单调队列优化. 但看了网上的许多 ...
- springboot 打war
pom.xml <packaging>war</packaging> <!-- 打包设置 --> <plugins> <plugin> &l ...
- 转 - mybatis中${}、 #{}区别及应用场景
转与 https://www.jianshu.com/p/bbeff97d41eb 动态sql是mybatis的主要特性之一.在mapper中定义的参数传到xml中之后,在查询之前mybatis会对其 ...
- 阿里云短信服务bug
接入阿里云短信服务,在springboot中写测试方法,执行到 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou ...
- error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
安装mysql是出现这个错误. python3.和python2.两个的版本不一样,所以安装的东西也不一样:MySQLdb 安装mysql的连接包.工具安装 Python3.x版本:Pip insta ...
- JAVA String类型和原型模式
如上例所述,变量a,b和它们的值10,20都是存在栈里面,声明的所以String类型的引用也都是存在栈里.而字符串abc是存在字符串常量池中,new出来的String对象则是存在堆里. String ...
- git仓库构建小记
1.新建 .git 文件夹 约定的文件目录下,新建 .git 文件夹 mkdir test.git 2.初始化服务端仓库 git init --bare test.git 此时进入 test.git ...
- BZOJ4762 最小集合(动态规划+容斥原理)
https://www.cnblogs.com/AwD-/p/6600650.html #include<iostream> #include<cstdio> #include ...
- P2495 [SDOI2011]消耗战 lca倍增+虚树+树形dp
题目:给出n个点的树 q次询问 问切断 k个点(不和1号点联通)的最小代价是多少 思路:树形dp sum[i]表示切断i的子树中需要切断的点的最小代价是多少 mi[i]表示1--i中的最小边权 ...
- opencv 边缘检测原理
只是实现一下,暂不考虑效率 import cv2 as cv import numpy as np import math # 从源码层面实现边缘检测 img = cv.imread('../imag ...