क्या कोई पूर्ण tastypie django उदाहरण साइट और सेटअप डाउनलोड के लिए उपलब्ध है? मैं पूरे दिन अपने सिर को लपेटने के साथ कुश्ती कर रहा हूं। मेरे पास निम्न कोड है। असल में, मेरे पास एक पोस्ट फॉर्म है जिसे अजाक्स के साथ संभाला जाता है। जब मैं अपने फॉर्म पर "सबमिट" पर क्लिक करता हूं और AJAX अनुरोध चलता है, तो कॉल "POST http://192.168.1.110:8000/api/private/client_basic_info/ 404 (नहीं मिला)" मेरे पास यूआरएल कॉन्फ़िगर किया गया है, मुझे लगता है। मैं http://192.168.1.110:8000/api/private/client_basic_info/?format=json बस ठीक कर सकता हूं। क्या मुझे कुछ सेटिंग्स याद आ रही हैं या मेरी विधियों में कुछ मौलिक त्रुटियां हैं? मेरा इरादा यह है कि प्रत्येक उपयोगकर्ता एक और केवल एक "ग्राहक मूलभूत जानकारी" फ़ॉर्म/मॉडल भर सकता/संशोधित कर सकता है।tastypie पोस्टिंग और पूर्ण उदाहरण
एक पेज:
{% extends "layout-column-100.html" %}
{% load uni_form_tags sekizai_tags %}
{% block title %}Basic Information{% endblock %}
{% block main_content %}
{% addtoblock "js" %}
<script language="JavaScript">
$(document).ready(function() {
$('#client_basic_info_form').submit(function (e) {
form = $(this)
form.find('span.error-message, span.success-message').remove()
form.find('.invalid').removeClass('invalid')
form.find('input[type="submit"]').attr('disabled', 'disabled')
e.preventDefault();
var values = {}
$.each($(this).serializeArray(), function(i, field) {
values[field.name] = field.value;
})
$.ajax({
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(values),
dataType: 'json',
processData: false,
url: '/api/private/client_basic_info/',
success: function(data, status, jqXHR) {
form.find('input[type="submit"]')
.after('<span class="success-message">Saved successfully!</span>')
.removeAttr('disabled')
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR)
console.log(textStatus)
console.log(errorThrown)
var errors = JSON.parse(jqXHR.responseText)
for (field in errors) {
var field_error = errors[field][0]
$('#id_' + field).addClass('invalid')
.after('<span class="error-message">'+ field_error +'</span>')
}
form.find('input[type="submit"]').removeAttr('disabled')
}
}) // end $.ajax()
}) // end $('#client_basic_info_form').submit()
}) // end $(document).ready()
</script>
{% endaddtoblock %}
{% uni_form form form.helper %}
{% endblock %}
संसाधनों
from residence.models import ClientBasicInfo
from residence.forms.profiler import ClientBasicInfoForm
from tastypie import fields
from tastypie.resources import ModelResource
from tastypie.authentication import BasicAuthentication
from tastypie.authorization import DjangoAuthorization, Authorization
from tastypie.validation import FormValidation
from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
fields = ['username']
filtering = {
'username': ALL,
}
include_resource_uri = False
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
def dehydrate(self, bundle):
forms_incomplete = []
if ClientBasicInfo.objects.filter(user=bundle.request.user).count() < 1:
forms_incomplete.append({'name': 'Basic Information', 'url': reverse('client_basic_info')})
bundle.data['forms_incomplete'] = forms_incomplete
return bundle
class ClientBasicInfoResource(ModelResource):
user = fields.ForeignKey(UserResource, 'user')
class Meta:
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
include_resource_uri = False
queryset = ClientBasicInfo.objects.all()
resource_name = 'client_basic_info'
validation = FormValidation(form_class=ClientBasicInfoForm)
list_allowed_methods = ['get', 'post', ]
detail_allowed_methods = ['get', 'post', 'put', 'delete']
संपादित करें:
मेरे संसाधन फ़ाइल है:
from residence.models import ClientBasicInfo
from residence.forms.profiler import ClientBasicInfoForm
from tastypie import fields
from tastypie.resources import ModelResource
from tastypie.authentication import BasicAuthentication
from tastypie.authorization import DjangoAuthorization, Authorization
from tastypie.validation import FormValidation
from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
fields = ['username']
filtering = {
'username': ALL,
}
include_resource_uri = False
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
#def apply_authorization_limits(self, request, object_list):
# return object_list.filter(username=request.user)
def dehydrate(self, bundle):
forms_incomplete = []
if ClientBasicInfo.objects.filter(user=bundle.request.user).count() < 1:
forms_incomplete.append({'name': 'Basic Information', 'url': reverse('client_basic_info')})
bundle.data['forms_incomplete'] = forms_incomplete
return bundle
class ClientBasicInfoResource(ModelResource):
# user = fields.ForeignKey(UserResource, 'user')
class Meta:
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
include_resource_uri = False
queryset = ClientBasicInfo.objects.all()
resource_name = 'client_basic_info'
validation = FormValidation(form_class=ClientBasicInfoForm)
#list_allowed_methods = ['get', 'post', ]
#detail_allowed_methods = ['get', 'post', 'put', 'delete']
def apply_authorization_limits(self, request, object_list):
return object_list.filter(user=request.user)
मैं ClientBasicInfo नल के उपयोगकर्ता क्षेत्र बनाया एक डी पोस्ट काम करने लगता है। मैं अब प्रविष्टि को अपडेट करने का प्रयास करना चाहता हूं। क्या वह सिर्फ एजेक्स यूआरएल में पीके जोड़ रहा है? उदाहरण के लिए/api/private/client_basic_info/21 /? जब मैं उस फॉर्म को जमा करता हूं तो मुझे 501 लागू संदेश नहीं मिलता है। मैंने वास्तव में क्या लागू नहीं किया है? मैं ModelResource subclassing कर रहा हूँ, जो दस्तावेजों के अनुसार लागू सभी ओआरएम से संबंधित कार्यों होना चाहिए।
शायद APPEND_SLASHES के साथ कुछ समस्या हो सकती है? क्या आपने http://192.168.1.110:8000/api/private/client_basic_info पर पोस्ट करने का प्रयास किया है (बिना स्लैश के पीछे)? केवल अनुमान है। – nisc
हम्म मैंने यूआरएल को स्लैश लिया और "आप इस यूआरएल को POST के माध्यम से बुलाया, लेकिन यूआरएल स्लैश में खत्म नहीं होता है और आपके पास एपीपी END_SLASH सेट है।" मैंने एपीपी END_SLASH = मेरी सेटिंग्स पर झूठा लगाया और अब मुझे 403 निषिद्ध संदेश (सीएसआरएफ सत्यापन विफल) मिला है। मैं csrf_exempt देखने के द्वारा पिछले हो गया है। अब मुझे 501 लागू त्रुटि नहीं मिली है। मैंने एक कस्टम हाइड्रेट फ़ंक्शन जोड़ा और उसे पिछले कर दिया। मैं वस्तु को अद्यतन करने के लिए एक फॉर्म जमा करने का प्रयास करता हूं लेकिन मुझे एक और त्रुटि मिलती है। त्रुटि के बाद त्रुटि, मुझे लगता है कि मैं सिर्फ tastypie के साथ छोड़ देंगे। –
मैं एक स्वादिष्ट पाई विशेषज्ञ नहीं हूं, इसलिए मैं केवल और अनुमान लगा सकता हूं। क्या आपने विभिन्न प्रमाणीकरण और प्रमाणीकरण बैकएंड का उपयोग करने का प्रयास किया है? क्रमशः प्राधिकरण और प्रमाणीकरण के लिए स्वादिष्ट 'प्राधिकरण' और 'प्रमाणीकरण' कक्षाओं का उपयोग करने का प्रयास करें। उन्हें बहुत अनुमोदित होना चाहिए। यह जांचने के लिए कि क्या यह समस्या है। – nisc