Python Django在现有项目中使用restframework后返回404
我已经准备好了工作项目,在将API添加到它提供的404 URL中之后,我正在为APIViews添加RESTAPI以实现类似的功能 Views.pyPython 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
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}))