Python 为什么此Django API调用出现意外的关键字参数错误?
我正在学习Django Restful教程,并编写了以下代码 在views.py中:Python 为什么此Django API调用出现意外的关键字参数错误?,python,django,django-rest-framework,typeerror,keyword-argument,Python,Django,Django Rest Framework,Typeerror,Keyword Argument,我正在学习Django Restful教程,并编写了以下代码 在views.py中: from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework import status
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET','POST'])
def snippet_list(request, format=None):
"""
List all snippets, or create a new snippet.
"""
if request.method == 'GET':
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在URL.py中:
from django.conf.urls import url
from snippets import views
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
url(r'^snippets/$',views.snippet_list),
url(r'^snippets/(?P<pk>[0-9]+)/$',views.snippet_detail)
]
urlpatterns = format_suffix_patterns(urlpatterns)
我得到一个错误,该错误会产生此回溯:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/snippets.json
Django Version: 1.9.7
Python Version: 2.7.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'snippets',
'quickstart']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/home/myname/workspace/restTutorial/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/home/myname/workspace/restTutorial/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/myname/workspace/restTutorial/env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
Exception Type: TypeError at /snippets.json
Exception Value: snippet_list() got an unexpected keyword argument 'format'
为什么我会犯这个错误
编辑:链接到问题是我在
views.py
文件中有重复的函数,在底部附近有不同的装饰器。删除它们解决了问题。试试这个
http http://127.0.0.1:8000/snippets.json # JSON suffix http
http://127.0.0.1:8000/snippets.api # Browsable API suffix
反而
http http://127.0.0.1:8000/snippets/?format=json
http http://127.0.0.1:8000/snippets/?format=api
我遇到了一个类似的问题我的错误是我在声明URL时使用了Django的反向模块,而不是Django Rest Framework的反向模块: 请勿使用此选项:
from django.urls import reverse
改用这个:
from rest_framework.reverse import reverse
你能发布你的设置吗?这是pastebin:@user1362215上文件的副本。发布设置时,你需要隐藏你的密钥。然后用该链接更新问题。完成。不过,这只是一个教程,所以安全性不是一个大问题。请发布完整的堆栈跟踪,而不仅仅是最后一行。
from rest_framework.reverse import reverse
@api_view(['GET'])
def api_root(request, format=None):
return Response({
#'users': reverse('users:user-list', request=request, format=format),
'transactions': reverse('transactions:transaction-list', request=request, format=format),
})