gpt4 book ai didi

python - django tastypie 中拒绝跨域 json 数据

转载 作者:行者123 更新时间:2023-12-01 06:00:54 25 4
gpt4 key购买 nike

我使用 django-tastypie 使用 GET、POST、PUT、DELETE 方法,当客户端和服务器都来自同一域时,它们工作顺利,但如果我从不同域发出请求,则什么也不会发生。

有什么线索吗?

模型.py

from django.db import models
class Entry(models.Model):
title = models.CharField(max_length=30)
body = models.CharField(max_length=40)
pub_date = models.DateField()
slug=models.CharField(max_length=30)

资源.py

from django.contrib.auth.models import User
from tastypie.authorization import Authorization
from tastypie import fields
from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
from myapp.models import Entry


class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
excludes = ['email', 'password', 'is_active', 'is_staff', 'is_superuser']
filtering = {
'username': ALL,
}


class EntryResource(ModelResource):

class Meta:
queryset = Entry.objects.all()
resource_name = 'entry'
authorization = Authorization()
filtering = {
'user': ALL_WITH_RELATIONS,
'pub_date': ['exact', 'lt', 'lte', 'gte', 'gt'],
}

url.py

from django.views.generic.simple import direct_to_template
from django.conf.urls.defaults import *
from tastypie.api import Api
from myapp.resources import EntryResource, UserResource

v1_api = Api(api_name='v1')
v1_api.register(UserResource())
v1_api.register(EntryResource())

urlpatterns = patterns('',
# The normal jazz here...
(r'^api/', include(v1_api.urls)),
(r'^basic/$', direct_to_template, {'template': 'todos/test.html'})
)

模板文件如下

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script language="javascript">
jQuery(document).ready(function($) {
var data = JSON.stringify({
"body": "This will prbbly be my lst edited post.",
"pub_date": "2011-05-22T00:46:38",
"slug": "another-post",
"title": "Another Post",

});
$.ajax({
url: "http://localhost:8000/api/v1/entry/1/?format=json",
type: 'PUT',
contentType: 'application/json',
data: data,
dataType: 'json',
processData: false,
success:function(data) {
alert(data);
},
error : function(data){
alert('error')
},
})
})

</script>
</head>
<body>
body content goes here
</body>
</html>

现在当我运行http://localhost:8000/basic时它非常适合 CRUD

后来我安装了apache服务器并复制了basic.html。当我运行http://localhost:81/basic.html时那么服务器不接受json数据。我并行运行了 apache 和 python 服务器。

最佳答案

您需要将客户端和服务器设置为跨域 ajax。

在 jquery 中,您可以在 $.ajax() 调用中设置 crossDomain : true(参见http://api.jquery.com/jQuery.ajax/)

在服务器端,您需要设置几个接受 header http://enable-cors.org/

您可以通过查找CORS规范来了解有关跨域请求的更多信息: http://www.w3.org/TR/cors/

关于python - django tastypie 中拒绝跨域 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10528981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com