Python Django在现有项目中使用restframework后返回404

Python Django在现有项目中使用restframework后返回404,python,django,django-views,Python,Django,Django Views,我已经准备好了工作项目,在将API添加到它提供的404 URL中之后,我正在为APIViews添加RESTAPI以实现类似的功能 Views.py class PostLikeAPIToggle(APIView): authentication_classes = (authentication.SessionAuthentication,) permission_classes = (permissions.IsAuthenticated,) def get(self, request, i

我已经准备好了工作项目,在将API添加到它提供的404 URL中之后,我正在为APIViews添加RESTAPI以实现类似的功能

Views.py

class PostLikeAPIToggle(APIView):
authentication_classes = (authentication.SessionAuthentication,)
permission_classes = (permissions.IsAuthenticated,)

def get(self, request, id=None, format=None):
    obj = get_object_or_404(Post, id=id)
    url_ = obj.get_absolute_url() 
    user = self.request.user
    updated = False
    liked = False

    if user.is_authenticated():
        if user in obj.likes.all():
            liked = False
            obj.likes.remove(user)
        else:
            liked = True
            obj.likes.add(user)
        updated = True
    data = {
        "updated" : updated,
        "liked" : liked
    }
    return Response(data)
url.py

from django.conf.urls import url
from django.contrib import admin
from posts import views
from rest_framework import routers
app_name = 'posts'
urlpatterns = [
url(r'^$', views.post_list, name='list'),
url(r'^create/$', views.post_create, name='create_post'),
url(r'^(?P<id>[\w-]+)/$', views.post_detail, name='detail'),
url(r'^(?P<id>[\w-]+)/edit/$', views.post_update, name='post_update'),
url(r'^api/(?P<id>[\w-]+)/like/$', views.PostLikeAPIToggle.as_view(), name='like-api-toggle'),
url(r'^(?P<id>[\w-]+)/like/$', views.PostLikeToggle.as_view(), name='like-toggle'),
url(r'^(?P<id>[\w-]+)/delete/$', views.post_delete),]
当我重定向时


它给了我404请帮助

根据上面的评论,这是发生在您身边的错误硬编码URL的原因

而不是访问
http://127.0.0.1:8000/api/posts/1/like
您应该访问
http://127.0.0.1:8000/posts/api/1/like

请注意,在根
url.py
中有以下内容:

url(r'^posts/', include("posts.urls", namespace='posts'))
posts.url中,您有:

url(r'^api/(?P<id>[\w-]+)/like/$', views.PostLikeAPIToggle.as_view(), name='like-api-toggle')
您还可以通过以下方式确定url:

> ./manage.py shell

from django.urls import reverse

print(reverse('posts:like-api-toggle', kwargs={'id': 1}))
注意:您还可以从
应用程序的
url.py
中删除
应用程序的名称='posts'
。您正在根目录中定义
名称空间
url.py
包括(“posts.url”,namespace='posts')


希望对你有帮助

如何从
r'^api/(?p[\w-]+)/like/$”
中删除
api/
?因此它将类似于url(r'^(?p[\w-]+)/like/$,views.PostLikeToggle.as_view(),name='like-toggle'),它可以工作,但我需要使用rest\u-api,您从哪里得到这个错误?在模板中?或者在浏览器地址栏中硬编码URL时?使用浏览器地址栏中的硬编码。请显示根
url.py
,好吗?很高兴我能帮忙!!
[--- from root urls.py ----] [--from posts urls--]
http://127.0.0.1:8000/posts/      api/1/like/
> ./manage.py shell

from django.urls import reverse

print(reverse('posts:like-api-toggle', kwargs={'id': 1}))