2012-05-10 1 views
1

Я использовал django-tastypie, используя методы GET, POST, PUT, DELETE, они работают плавно, когда клиент и сервер из одного домена, но если я делаю запрос из другого домена, ничего произошло вообще.данные перекрестного домена json, отклоненные в django tastypie

Любой ключ?

models.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) 

resources.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'], 
     } 

urls.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 параллельно.

+0

Вы хотите узнать, не могли бы вы предоставить нам какие-либо детали? – Tadeck

+0

, пожалуйста, проверьте отредактированный вопрос – sumit

ответ

2

Вам необходимо настроить для своего клиента и вашего сервера кросс-домен ajax.

В JQuery, вы бы установить crossDomain : true в вашем $.ajax() вызова (см http://api.jquery.com/jQuery.ajax/)

На стороне сервера, вам нужно будет установить пару принимать заголовки http://enable-cors.org/

Вы можете узнать подробнее о запросе на перекрестный домен, просмотрев спецификацию CORS: http://www.w3.org/TR/cors/

+0

Не могли бы вы рассказать, где взять крючки, которые принимают заголовки в django. – sumit

+0

Вы можете сделать это в промежуточном программном обеспечении django. Вот хороший пример: https://gist.github.com/1369619 – shreddd

+0

И вот как работает слой промежуточного слоя - https://docs.djangoproject.com/en/dev/topics/http/middleware/ – shreddd

 Смежные вопросы

  • Нет связанных вопросов^_^