在 Django 上测试 Ajax
Testing Ajax on Django
我正在尝试为 Ajax 在 Django 中获取请求编写测试。
这是我的尝试。
from django.test import TestCase
from django.urls import reverse
from .models import ResourcePost, User
from register.models import DonorProfile
from django.utils import timezone
class getResourcePostTests(TestCase):
def setUp(self):
ResourcePost.objects.create(
title="test1",
description="test",
quantity=10,
dropoff_time_1=timezone.now(),
dropoff_time_2=timezone.now(),
dropoff_time_3=timezone.now(),
date_created=timezone.now(),
donor=createdonor_1(),
resource_category="FOOD",
status="AVAILABLE",
)
...
def test_getResourcePost(self):
rescource_post_1 = ResourcePost.objects.get(title="test1")
rescource_post_2 = ResourcePost.objects.get(title="test2")
rescource_post_3 = ResourcePost.objects.get(title="test3")
response = self.client.get(reverse('donation:getResourcePosts'))
self.assertEqual(response.status_code, 200)
这是我对 ajax 通话的看法:
@login_required
def getResourcePost(request):
user = request.user
curr_user_rc_1 = user.helpseekerprofile.rc_1
curr_user_rc_2 = user.helpseekerprofile.rc_2
curr_user_rc_3 = user.helpseekerprofile.rc_3
posts = ResourcePost.objects.all()
passingList = []
for post in posts:
if post.date_created >= user.helpseekerprofile.message_timer_before and (
post.resource_category == curr_user_rc_1
or post.resource_category == curr_user_rc_2
or post.resource_category == curr_user_rc_3
):
notiPost = {
"id": post.id,
"title": post.title,
"description": post.description,
}
passingList.append(notiPost)
context = {"resource_posts": passingList}
return JsonResponse(context)
这是我的 ajax 代码:
$(document).ready(function () {
setInterval(() => {
$.ajax({
type: 'GET',
url: "{% url 'donation:getResourcePosts' %}",
success: function (response) {
$("#display").html('<i class="fas fa-bell"></i>')
let postCounter = 0
for (i = 0; i < response.resource_posts.length; i++) {
postCounter += 1
}
if (postCounter > 0) {
$("#display").append('<span class="message-number">' + postCounter + '</span>')
}
},
error: function (response) {
console.log("No DATA FOUND")
}
})
}, 1000 * 2)
})
我总是失败,因为响应是 302。
- 为什么我没有得到 200?我该如何解决才能获得 200?
- 变量
rescource_post_X
作为未使用的变量出现。我该如何使用它们?我应该使用它们吗?
谢谢!
@login_required 装饰器正在将您的请求重定向到登录页面
我正在尝试为 Ajax 在 Django 中获取请求编写测试。 这是我的尝试。
from django.test import TestCase
from django.urls import reverse
from .models import ResourcePost, User
from register.models import DonorProfile
from django.utils import timezone
class getResourcePostTests(TestCase):
def setUp(self):
ResourcePost.objects.create(
title="test1",
description="test",
quantity=10,
dropoff_time_1=timezone.now(),
dropoff_time_2=timezone.now(),
dropoff_time_3=timezone.now(),
date_created=timezone.now(),
donor=createdonor_1(),
resource_category="FOOD",
status="AVAILABLE",
)
...
def test_getResourcePost(self):
rescource_post_1 = ResourcePost.objects.get(title="test1")
rescource_post_2 = ResourcePost.objects.get(title="test2")
rescource_post_3 = ResourcePost.objects.get(title="test3")
response = self.client.get(reverse('donation:getResourcePosts'))
self.assertEqual(response.status_code, 200)
这是我对 ajax 通话的看法:
@login_required
def getResourcePost(request):
user = request.user
curr_user_rc_1 = user.helpseekerprofile.rc_1
curr_user_rc_2 = user.helpseekerprofile.rc_2
curr_user_rc_3 = user.helpseekerprofile.rc_3
posts = ResourcePost.objects.all()
passingList = []
for post in posts:
if post.date_created >= user.helpseekerprofile.message_timer_before and (
post.resource_category == curr_user_rc_1
or post.resource_category == curr_user_rc_2
or post.resource_category == curr_user_rc_3
):
notiPost = {
"id": post.id,
"title": post.title,
"description": post.description,
}
passingList.append(notiPost)
context = {"resource_posts": passingList}
return JsonResponse(context)
这是我的 ajax 代码:
$(document).ready(function () {
setInterval(() => {
$.ajax({
type: 'GET',
url: "{% url 'donation:getResourcePosts' %}",
success: function (response) {
$("#display").html('<i class="fas fa-bell"></i>')
let postCounter = 0
for (i = 0; i < response.resource_posts.length; i++) {
postCounter += 1
}
if (postCounter > 0) {
$("#display").append('<span class="message-number">' + postCounter + '</span>')
}
},
error: function (response) {
console.log("No DATA FOUND")
}
})
}, 1000 * 2)
})
我总是失败,因为响应是 302。
- 为什么我没有得到 200?我该如何解决才能获得 200?
- 变量
rescource_post_X
作为未使用的变量出现。我该如何使用它们?我应该使用它们吗?
谢谢!
@login_required 装饰器正在将您的请求重定向到登录页面