day103 跨域请求 与频率访问限制.
目录
一、跨域请求
二、频率访问限制
一 、同一个域下的ajax请求访问
url文件
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r"^index/",views.index),
url(r"^books/",views.books),
]
views
from django.shortcuts import render,HttpResponse # Create your views here.
def index(request):
return render(request,"index.html") def books(request): import json
book_list =["西游记","水浒传","金瓶"] return HttpResponse(json.dumps(book_list,ensure_ascii=False))
html index文件
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script> </head>
<body> <button class="btn">click</button> <p>书籍列表:</p> <p class="book_list"></p>
<script>
$(".btn").click(function () {
$.ajax({
url:"/books/",
success:function (data) {
$(".book_list").append(data)
}
}) }) </script> </body>
</html>

结果为

第二个域的views文件为:
# Create your views here.
def books(request):
import json
book_list =["西游记","水浒传","金瓶"] HttpResponse(json.dumps(book_list,ensure_ascii=False))
二、跨域访问
将 ajax的访问路径做更改

输出结果为:


解决办法 在第二个项目的view文件里做如下更改
# Create your views here.
def books(request):
import json
book_list =["西游记","水浒传","金瓶"] # return HttpResponse(json.dumps(book_list,ensure_ascii=False))
obj =HttpResponse(json.dumps(book_list,ensure_ascii=False))
obj["Access-Control-Allow-Origin"] ="http://127.0.0.1:8000"
return obj


打印结果:

预检


ajax请求代码


二、频率访问限制
viewS文件
from django.shortcuts import render,HttpResponse # Create your views here.
from app01 import models
from rest_framework.views import APIView
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet
from django.views import View # 序列化组件
class BookModelSerializers(ModelSerializer):
class Meta:
model =models.Book
fields ="__all__" class PublishModelSeralizers(ModelSerializer):
class Meta:
models=models.Publish
fields ="__all__" class AuthorModelSeralizers(ModelSerializer):
class Meta:
models =models.Author
fields ="__all__" # 频率访问组件
from rest_framework.throttling import BaseThrottle
class VisitThrottle(BaseThrottle):
def allow_request(self,request,view):
return False class BooksModeView(ModelViewSet): throttle_classes = [VisitThrottle]
queryset = models.Book.objects.all()
serializer_class = BookModelSerializers

案例 每隔10秒最多访问3次
from django.shortcuts import render,HttpResponse # Create your views here.
from app01 import models
from rest_framework.views import APIView
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet # 序列化组件
class BookModelSerializers(ModelSerializer):
class Meta:
model =models.Book
fields ="__all__" class PublishModelSeralizers(ModelSerializer):
class Meta:
models=models.Publish
fields ="__all__" class AuthorModelSeralizers(ModelSerializer):
class Meta:
models =models.Author
fields ="__all__" # 频率访问组件
from rest_framework.throttling import BaseThrottle VISIT_RECORD={}
class VisitThrottle(BaseThrottle): def __init__(self):
self.history =[] def allow_request(self,request,view):
remote_addr =request.META.get("REMOTE_ADDR")
print(remote_addr)
print(self.get_ident(request)) import time
ctime =time.time()
#IP 第一次访问
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr] = [ctime,]
return True #查去当前访问IP的访问历史记录
history =VISIT_RECORD.get(remote_addr)
self.history =history
print(self.history) if history and ctime - history[-1] > 10:
history.pop() if len(history)<3:
history.insert(0,ctime) #索引第一位开始插入
return True
else:
return False #显示剩余多少时间可以继续访问
def wait(self):
import time
ctime = time.time()
return 10 - (ctime - self.history[-1]) class BooksModeView(ModelViewSet): throttle_classes = [VisitThrottle,]
queryset = models.Book.objects.all()
serializer_class = BookModelSerializers

day103 跨域请求 与频率访问限制.的更多相关文章
- spring boot跨域请求访问配置以及spring security中配置失效的原理解析
一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[orig ...
- 本地主机作服务器解决AJAX跨域请求访问数据的方法
近几天学到ajax,想测试一下ajax样例,由于之前在阿里租用的服务器过期了,于是想着让本地主机既做服务器又做客户端,只是简单地测试,应该还行. 于是,下载了xampp,下载网址http://www. ...
- Tornado—添加请求头允许跨域请求访问
跨域请求访问 如果是前后端分离,那就肯定会遇到cros跨域请求难题,可以设置一个BaseHandler,然后继承即可. class BaseHandler(tornado.web.RequestHan ...
- nginx 跨域请求访问
1.nginx跨域请求访问 location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin(请求域名) *(所有域名) http ...
- 解决前后端分离的“两次请求”引出的Web服务器跨域请求访问问题的解决方案
在前后端分离的项目中,前端和后端可能是在不同的服务器上,也可以是Docker上,那就意味着前端请求后端Restful接口时,存在跨域情况. 后端在做了通用的跨域资源共享CORS设置后,前端在做ajax ...
- ajax跨域请求时,sessionId不一样,导致无法记住登陆状态
遇到这样一个场景,就是前端的域是dev,请求接口时,接口的域是beta,即使在服务端设置了cookie存放的域,'COOKIE_DOMAIN' => '.roboming.com',虽然c ...
- jQuery使用ajax跨域请求获取数据
jQuery使用ajax跨域请求获取数据 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的 ...
- 关于试用jquery的jsonp实现ajax跨域请求数据的问题
我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...
- 【JavaScript】--重点解析之跨域请求
JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON是用字符串来表示Javascript对象,例如可以在django中发送一个JSON格式 ...
随机推荐
- oracle基本查询入门(二) 子查询
一.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询在主查询之前 ...
- 教你用PS修复老照片
原图素材虽然很旧,不过人物部分并没有怎么损坏,只是有一些色块和杂色.修复的工程相对来说也少很多.只需要给人物磨好皮,然后把暗调和高光部分调出来即可.原图 一.打开原图素材,按Ctrl + J ...
- CComSafeArray
https://blog.csdn.net/tangaowen/article/details/6554640
- sys.argv和getopt.getopt()的用法
1.sys.argv Python中sys.argv是命令行参数从程序外部传值的的一种途径,它是一个列表,列表元素是我们想传进去的的新参数,所以可以用索引sys.argv[]来获得想要的值.因为一个写 ...
- Reverse string using recursion
On-Site Question 3 - SOLUTION Question Given a string, write a function that uses recursion to rever ...
- Unsorted, maximum ==> sorted
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...
- 2018.08.16 洛谷P1471 方差(线段树)
传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...
- 【Unity】1.3 Unity3D游戏开发学习路线
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.基本思路 第1步--了解编辑器 首先了解unity3d的菜单,视图界面.这些是最基本的基础,可以像学word操作一样,大致能明 ...
- gj7 对象引用、可变性和垃圾回收
7.1 python变量到底是什么 #python和java中的变量本质不一样,python的变量实质上是一个指针 int str, 便利贴 a = 1 a = "abc" #1. ...
- 使用async-http-client实现异步批量http请求
最近项目中需要在微服务中调用rest接口,而且需要调用得次数很多,所以同步得http客户端已经不满足要求,在网上查阅资料后发现了async-http-client这个包得性能不错,所以写了个demo测 ...

