目录

一、跨域请求

二、频率访问限制

一 、同一个域下的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

  

最新文章

  1. 如何从零基础学习VR
  2. (整理) JQuery中的AJAX
  3. loadrunner负载测试实例
  4. JSON转换为数组 但读取JSON的顺序目前没法保证
  5. Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
  6. 课堂所讲整理:HTML--6运算符、类型转换
  7. oracle 10G以上版本 树形查询新加的几个功能
  8. Quartz.NET simple_demo
  9. UVALive 6947 Improvements(DP+树状数组)
  10. Tensorflow (1)
  11. [Swift]LeetCode741. 摘樱桃 | Cherry Pickup
  12. http/https协议
  13. Python 学习笔记03篇
  14. 从零开始学安全(十一)●IP地址
  15. java时间计算
  16. C#引用出错
  17. ROS学习手记 - 8 编写ROS的Publisher and Subscriber
  18. leetcode717&mdash;1-bit and 2-bit Characters
  19. P2651 添加括号III
  20. delphi udp文件传输

热门文章

  1. 坑爹的HP
  2. php 中的信号处理
  3. 建表Table
  4. 使用phpExcel导出excel文件
  5. qt基本类
  6. attempt to create delete event with null entity
  7. /etc/inittab加入自动启动格式
  8. 2018.09.27 bzoj2118: 墨墨的等式(最短路+背包)
  9. 2018.09.24 bzoj1816: [Cqoi2010]扑克牌(二分答案)
  10. Linux服务器部署系列之七—OpenLDAP篇