- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个“添加 friend ”功能,用户可以为另一个用户用户 URL 创建一个友谊请求对象:http://localhost:8000/api/v1/users/{username}/add_friend/
但我在制作时遇到错误。
Urls.py 中的代码
from .views import (AddFriendUserAPIView)
urlpatterns = [
url(r'^(?P<username>[\w-]+)/add_friend/$', AddFriendUserAPIView.as_view({'post': 'add_friend'}), name='add_friend'),
]
Views.py 中的代码
class AddFriendUserAPIView(ReadOnlyModelViewSet):
serializer_class = FriendRequestSerializer
queryset = FriendshipRequest.objects.all()
lookup_field = 'username'
@detail_route(methods=['POST'])
def add_friend(self, request, username):
to_user = User.objects.get(username=request.data['to_user_username'])
add_qs = FriendshipRequest.objects.get_or_create(from_user=request.user, to_user=to_user , message='')
serializer = FriendRequestSerializer(add_qs)
return Response(serializer.data)
serializers.py 中的代码
class FriendRequestSerializer(ModelSerializer):
class Meta:
model = FriendshipRequest
fields = (
'id',
'from_user',
'to_user',
'message',
)
好友请求模型中的代码:
class FriendshipRequest(models.Model):
from_user = models.ForeignKey(User, related_name='friendship_requests_sent')
to_user = models.ForeignKey(User, related_name='friendship_requests_received')
message = models.TextField(blank=True)
引用引用的错误日志
Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\exception.py" in inner
41. response = get_response(request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "C:\Python27\lib\site-packages\rest_framework\viewsets.py" in view
90. return self.dispatch(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
489. response = self.handle_exception(exc)
File "C:\Python27\lib\site-packages\rest_framework\views.py" in handle_exception
449. self.raise_uncaught_exception(exc)
File "C:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
486. response = handler(request, *args, **kwargs)
File "C:\Users\User\Desktop\FeedGit\backend\api\authentication\add_friend.py" in add_friend
16. to_user = User.objects.get(username=request.data['to_user_username'])
File "C:\Python27\lib\site-packages\django\utils\datastructures.py" in __getitem__
85. raise MultiValueDictKeyError(repr(key))
Exception Type: MultiValueDictKeyError at /api/v1/users/duongnuhabang/add_friend/
Exception Value: "'to_user_username'"
最佳答案
又是你,你一定对DRF有什么误解。首先,您最好使用路由器通过 ModelViewSet
托管您的网址。例如:
项目/urls.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'user', UserViewSet, base_name='user')
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^admin/', admin.site.urls),
]
第二个是您需要的是 detail_router
而不是 list_router
:
View .py
class UserViewSet(ReadOnlyModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
lookup_field = username
@detail_route(methods=['POST'])
def add_friend(self, request, username):
to_user = self.get_object()
add_qs = FriendshipRequest.objects.get_or_create(from_user=request.user, to_user=to_user , message='')
serializer = FriendRequestSerializer(add_qs)
return Response(serializer.data)
将数据{}发布到www.example.com/user/【to_user_username】/add_friend/
如果你真的想在FriendShipViewSet中这样做(你可能更习惯这种风格),这里有演示:
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'friendship', FriendShipViewSet, base_name='friendship')
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^admin/', admin.site.urls),
]
class FriendShipViewSet(ReadOnlyModelViewSet):
serializer_class = FriendShipRequestSerializer
queryset = FriendShip.objects.all()
@list_route(methods=['POST'])
def add_friend(self, request):
to_user = User.objects.get(username=request.data['to_user_username'])
add_qs = FriendshipRequest.objects.get_or_create(from_user=request.user, to_user=to_user , message='')
serializer = self.get_serializer(add_qs)
return Response(serializer.data)
将数据{'to_user_username': 'your_custom_to_user_username'}
发布到www.example.com/friendship/add_friend/
关于python - list_route 错误 : POST methods in Viewset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938729/
我有以下两个 Django 模型(针对此示例进行了简化)。 class Participant(models.Model): name = models.CharField() stu
我有两种模型,一种是盒子,一种是盒子评论: 类 BoxViewSet(viewsets.ModelViewSet): 查询集 = Box.objects.all() 权限类=已验证, 序列化器类 =
我有一个基本的 View 集: class UsersViewSet(viewsets.ModelViewSet): permission_classes = (OnlyStaff,)
我有一个 Django 模型 Donation我公开为一个 View 集。现在我想为第二个模型添加一个额外的 URL Shop其中 Donation 的相关实例可以通过参数 order_id 检索并且
在文档中有带有自定义 url 的方法示例: http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers class Sni
我正在开发一个具有一些社交功能的项目,需要让用户可以看到他个人资料的所有详细信息,但只能看到其他人个人资料的公开部分。 有没有办法在一个 ViewSet 中做到这一点? 这是我的模型示例: class
我仍在学习 Django,我想这对某些人来说可能很容易。我试图找出简单设置 API URL 的最佳方法(以便它们都显示在 api 根目录中,并且可以实际用于项目中——在我的例子中是 /api/).我正
我有一个 ViewSet 类,其方法如下: @action(methods=["get"], detail=True, url_path="foo") def foo(self, request: R
我一直在尝试使用django-filters但对象没有被过滤。此外,权限不适用于 partial_update View 我有一个 View 集,它具有基本操作,如 list()、retrieve()
我有一个 ModelViewSet在 Django 的 REST 框架中,它使我能够通过以下地址执行 POST 和 GET: api/v1/users 这些用户与评论表有反向关系,我希望能够通过 UR
我是 django 的新手,正在使用 django-rest-framework 构建 REST API。我已经编写了一些代码来检查用户是否提供了一些参数。但是对于很多 if 条件来说这非常难看,所以
我想做以下事情: 用我的模型 class User(models.Model): id = models.AutoField(primary_key=True) field1 = mode
如何在 Django rest 框架 ViewSet 中对不同的功能使用不同的身份验证? 我创建了一个 UserViewSet,它有两个功能: 1。 list(列出所有注册的用户,permission
在 Django Rest Framework ViewSet 中,我有一个被覆盖的 list() class TicketViewSet(mixins.ListModelMixin,
View 集很方便,因为我们可以做这样的事情并获得一个完全工作的序列化器: class StoreObjectViewSet(mixins.ListModelMixin, mixins.Retriev
有什么优势 View 集 , 模型 View 集 和 APIView . django-rest-framework 文档中没有说清楚,也没有说什么时候使用ViewSet、ModelViewSet和A
我有一个带有 Django REST framework API 的移动应用程序,我有很多 ModelViewSet 可以调用来检索数据。我有性能问题,因为我需要在用户登录后调用很多路由,我想保留 R
我是 Python 和 Django 新手。我创建了 ViewSet,如下所示: api/views.py class UserDetails(ViewSet): """ CREATE, SELECT
我有一个分页结果集,因此响应返回如下: { "count": 944, "next": "http://api.visitorlando.teeny/consumer/listings/?page=3
我是 Python 和 Django 新手。我创建了 ViewSet,如下所示: api/views.py class UserDetails(ViewSet): """ CREATE, SELECT
我是一名优秀的程序员,十分优秀!