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格式 ...
随机推荐
- [leetcode]346. Moving Average from Data Stream滑动窗口平均值
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- Python学习记录day8
目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...
- google中guava类库:AsyncEventBus
1.guava事件总线(AsyncEventBus)使用 1.1引入依赖 <dependency> <groupId>com.google.guava</groupId& ...
- mysql中float、double、decimal三种类型,以及数值产生误差的原因
单精度浮点数用4字节(32bit)表示浮点数,采用IEEE754标准的计算机浮点数,在内部是用二进制表示的,如:7.22用32位二进制是表示不下的,所以就导致不精确了,存取会出现误差. mysql中f ...
- [z]kafka相关资料
http://my.oschina.net/ielts0909/blog/93190 http://www.iteye.com/magazines/107 http://blog.csdn.net/h ...
- NFS 挂载 + autofs
NFS:Network File System RPC:Remote Procedure Call 一.手动挂载 (mount -t nfs 服务端IP:/共享目录 /本地挂载点) 客户端 1.安 ...
- Django入门指南-第8章:第一个测试用例(完结)
python manage.py test python manage.py test --verbosity=2 # boards/tests.py from django.core.urlreso ...
- Django的路由层(1)
https://www.cnblogs.com/yuanchenqi/articles/8876685.html URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为 ...
- python3.4用循环往mysql5.7中写数据并输出
#!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...
- ASYNC PROGRAMING IN JAVASCRIPT[转]
本文从异步风格讲起,分析Javascript中异步变成的技巧.问题和解决方案.具体的,从回调造成的问题说起,并谈到了利用事件.Promise.Generator等技术来解决这些问题. 异步之殇 NON ...

