【发布时间】:2018-10-30 08:56:33
【问题描述】:
在我的应用程序中,我想使用 ajax 创建和删除 Course 实例。我已经完成了我的创建功能,如下:
urls.py
app_name = 'courses'
urlpatterns = [
path('index/', views.index, name='index'),
path('create/', views.create, name='create'),
path('delete/<int:course_id>/', views.delete, name='delete'),
]
views.py
from django.shortcuts import render, redirect
from courses.models import Course
from django.http import JsonResponse
from django.forms.models import model_to_dict
# Create your views here.
def index(request):
context = {
'courses':Course.objects.all(),
}
return render(request, 'courses/index.html', context)
def create(request):
if request.method == 'POST':
course = Course.objects.create(name=request.POST['name'], description=request.POST['description'])
# return redirect('courses:index')
# course is a queryset, we need to change it to a dictionary
return JsonResponse(model_to_dict(course))
else:
return render(request, 'courses/index.html')
def delete(request, course_id):
course = Course.objects.get(pk=course_id)
if request.method == 'POST':
course.delete()
courses = Course.objects.all()
return JsonResponse((courses))
# return JsonResponse(model_to_dict(course))
else:
return render(request, 'courses/index.html', {'courses':Course.objects.all()})
这里是它的 jquery:
$(document).ready(function(){
$('.course_form').submit(function(event){
console.log(event);
event.preventDefault();
$.ajax({
url: '/courses/create/',
method: 'post',
data: $(this).serialize(),
success: function(response){
console.log(response);
$('.courses').append(`<p>Name: ${response.name},
Description: ${response.description}</p>
<form class="delete_form" action="/courses/delete/${response.id}/" method="post">
<input type="submit" value="delete">
</form>
`)
$('.course_form')[0].reset();
}
});
})
$('delete_form').submit(function(event){
console.log(event);
event.preventDefault();
$.ajax({
url: '/courses/delete/',
method: 'post',
success: function(response){
console.log(response);
}
})
})
})
创建课程后,我会在其下方附加一个删除按钮。问题是表单是在没有csrf令牌的情况下创建的,但我不知道如何使用jquery添加一个,因为csrf令牌是python。有关如何解决此问题的任何想法?
【问题讨论】:
-
url: '/courses/delete/',需要course_id作为参数,它丢失了
标签: jquery ajax django django-forms django-views