Có trang web ví dụ đầy đủ về chế độ ăn ngon và thiết lập sẵn có để tải xuống không? Tôi đã vật lộn với việc quấn đầu quanh nó cả ngày. Tôi có đoạn mã sau. Về cơ bản, tôi có một mẫu POST được xử lý bằng ajax. Khi tôi nhấp vào "gửi" trên biểu mẫu của tôi và yêu cầu ajax chạy, cuộc gọi trả về "POST http://192.168.1.110:8000/api/private/client_basic_info/ 404 (KHÔNG TÌM KIẾM)" Tôi đã định cấu hình URL được, tôi nghĩ vậy. Tôi có thể truy cập http://192.168.1.110:8000/api/private/client_basic_info/?format=json tốt. Tôi có thiếu một số cài đặt hoặc thực hiện một số lỗi cơ bản trong phương pháp của mình không? Mục đích của tôi là mỗi người dùng có thể điền/sửa đổi một và chỉ một mẫu "mô hình/thông tin cơ bản của khách hàng".đăng bài yêu thích và ví dụ đầy đủ
một trang:
{% 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 %}
nguồn
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']
Edit:
tập tin nguồn của tôi bây giờ là:
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)
tôi đã thực hiện các lĩnh vực sử dụng của nullable ClientBasicInfo một d POST dường như hoạt động. Tôi muốn thử cập nhật mục nhập ngay bây giờ. Điều đó sẽ chỉ được thêm pk vào url ajax? Ví dụ/api/private/client_basic_info/21 /? Khi tôi gửi biểu mẫu đó, tôi nhận được thông báo KHÔNG THỰC HIỆN 501. Chính xác thì tôi chưa triển khai gì? Tôi đang phân lớp ModelResource, cần có tất cả các hàm liên quan đến ORM được triển khai theo các tài liệu.
Có thể một số vấn đề với APPEND_SLASHES? Bạn đã thử đăng bài lên http://192.168.1.110:8000/api/private/client_basic_info (không có dấu gạch chéo)? Chỉ cần đoán thôi. – nisc
Hmm Tôi lấy dấu gạch chéo ra khỏi url và nhận "Bạn đã gọi URL này qua POST, nhưng URL không kết thúc bằng dấu gạch chéo và bạn đã đặt APPEND_SLASH". Tôi đã áp dụng APPEND_SLASH = False cho cài đặt của mình và giờ tôi nhận được thông báo Cấm 403 (xác minh CSRF không thành công). Tôi đã vượt qua điều đó bằng cách làm cho xem csrf_exempt. Bây giờ tôi nhận được lỗi 501 không được triển khai. Tôi đã thêm một chức năng hydrate tùy chỉnh và vượt qua điều đó. Tôi cố gắng gửi biểu mẫu để cập nhật đối tượng nhưng tôi gặp lỗi khác. Lỗi sau khi lỗi, tôi nghĩ rằng tôi sẽ chỉ từ bỏ với ngon. –
Tôi không phải là chuyên gia TastyPie, vì vậy tôi chỉ có thể đoán được nhiều hơn. Bạn đã thử sử dụng các chương trình phụ trợ xác thực và ủy quyền khác nhau hay không? Hãy thử sử dụng các lớp 'Authorization' và' Authentication' của deliciouspie để ủy quyền và xác thực tương ứng. Họ nên rất dễ dãi. Chỉ để kiểm tra xem đó có phải là vấn đề không. – nisc