Django点赞功能测试失败:CSRF token疑似阻碍问题排查
CSRF token 疑似成为阻碍
我正在为Django应用编写测试用例,其中一个视图支持用户点赞其他用户帖子,但测试一直失败,疑似问题在于CSRF token,但无法确定。该视图不使用POST数据,仅依赖URL参数,此前同类问题靠解决CSRF修复,但本次尝试方法均无效。
以下是我的测试代码:
from django.test import TestCase, Client from django.utils import timezone from django.contrib.auth import get_user_model from django.contrib.auth.models import User from django.middleware.csrf import get_token from .views import update from .models import Post, Like def setUp(self): # creates a user and logs into the client self.user = User.objects.create_user(username='testuser', password='testpass') self.client = Client() self.client.force_login(self.user) --- some code ommited --- def test_like_view(self): # make a post p1 = Post.objects.create(title='title', body='body', published_date=timezone.now(), created_by=self.user) # get CSRF token response = self.client.get(f'/{p1.id}/update/') csrf_token = response.cookies['csrftoken'].value # send POST request with CSRF token response = self.client.post(f'/{p1.id}/like/', {'csrfmiddlewaretoken': csrf_token}) # check that the response status code is 302, indicating a redirect self.assertEqual(response.status_code, 302) # check that a Like object was created self.assertTrue(Like.objects.filter(post=p1).exists())
以下是对应的视图代码:
from django.shortcuts import render from django.http import HttpResponseRedirect from django.utils import timezone from django.db.models import Count from django.contrib.auth.decorators import login_required from .models import Post, Like --- some code ommited --- @login_required def like(request, pk): #users cannot like posts that they have allready liked in the past post = Post.objects.get(id=pk) l = Like(users = request.user, posts = post) all_likes = Like.objects.all() for like in all_likes: if l.users == like.users and l.posts == like.posts: return HttpResponseRedirect('..') l.save() return HttpResponseRedirect('..')
我已手动测试该视图,确认功能正常,通过Microsoft Edge开发者工具可见CSRF token正在传输。
内容的提问来源于stack exchange,提问作者callen44
相关产品推荐
相关产品推荐

