django restframwork put和delete不工作
对我来说很好。 但是,放在删除我使用“ u_repo_name”的删除 我收到错误消息:
找不到页面(404) 请求方法:放 请求URL:http:// localhost:8000/gitapi/repo/authoo/ 使用gitit.urls中定义的urlconf,django以此顺序尝试了这些URL模式:
admin/ gitapi/ [name ='gitapi'] gitapi/ repo/ gitapi/ repo/ str:u_repo_name
这是我的模型:
class UserRepos(models.Model):
U_repo_name =models.CharField( max_length=50)
这是我的URL:
urlpatterns = [
path('repo/',view=userreposapi),
path('repo/<str:U_repo_name>',view=userreposapi),
]
project urls:
urlpatterns = [
path('admin/', admin.site.urls),
path('gitapi/',include('gitapi.urls')),
]
这是我的序列化器:
class UserReposSerializer(serializers.ModelSerializer):
class Meta:
model = UserRepos
fields ='__all__'
这是我的观点:
@csrf_exempt
def userreposapi(request,id=0):
if request.method=='GET':
userrepos = UserRepos.objects.all()
userreposserializer = UserReposSerializer(userrepos , many=True)
return JsonResponse(userreposserializer.data , safe=False)
elif request.method=='POST':
userrepos_data=JSONParser().parse(request)
userreposerializer = UserReposSerializer(data=userrepos_data)
if userreposerializer.is_valid():
userreposerializer.save()
return JsonResponse("added successfully!!",safe=False)
return JsonResponse("failed to add",safe=False)
elif request.method=='Put':
userrepos_data=JSONParser().parse(request)
userrepos = UserRepos.objects.get(U_repo_name=userrepos_data['U_repo_name'])
userreposserializer=UserReposSerializer(userrepos,data=userrepos_data)
if userreposserializer.is_valid():
userreposserializer.save()
return JsonResponse("updated successfully", safe=False)
return JsonResponse("failed to update",safe=False)
elif request.method=='DELETE':
userrepos = UserRepos.objects.all()
userrepos.delete()
return JsonResponse("deleted",safe=False)
Get and post work pretty well for me .
but put and delete i use "U_repo_name" to look in table
i got the error message :
Page not found (404)
Request Method: PUT
Request URL: http://localhost:8000/gitapi/repo/authoo/
Using the URLconf defined in gitit.urls, Django tried these URL patterns, in this order:
admin/
gitapi/ [name='gitapi']
gitapi/ repo/
gitapi/ repo/str:U_repo_name
this is my model :
class UserRepos(models.Model):
U_repo_name =models.CharField( max_length=50)
this is my url :
urlpatterns = [
path('repo/',view=userreposapi),
path('repo/<str:U_repo_name>',view=userreposapi),
]
project urls :
urlpatterns = [
path('admin/', admin.site.urls),
path('gitapi/',include('gitapi.urls')),
]
this is my serializer :
class UserReposSerializer(serializers.ModelSerializer):
class Meta:
model = UserRepos
fields ='__all__'
and this is my views :
@csrf_exempt
def userreposapi(request,id=0):
if request.method=='GET':
userrepos = UserRepos.objects.all()
userreposserializer = UserReposSerializer(userrepos , many=True)
return JsonResponse(userreposserializer.data , safe=False)
elif request.method=='POST':
userrepos_data=JSONParser().parse(request)
userreposerializer = UserReposSerializer(data=userrepos_data)
if userreposerializer.is_valid():
userreposerializer.save()
return JsonResponse("added successfully!!",safe=False)
return JsonResponse("failed to add",safe=False)
elif request.method=='Put':
userrepos_data=JSONParser().parse(request)
userrepos = UserRepos.objects.get(U_repo_name=userrepos_data['U_repo_name'])
userreposserializer=UserReposSerializer(userrepos,data=userrepos_data)
if userreposserializer.is_valid():
userreposserializer.save()
return JsonResponse("updated successfully", safe=False)
return JsonResponse("failed to update",safe=False)
elif request.method=='DELETE':
userrepos = UserRepos.objects.all()
userrepos.delete()
return JsonResponse("deleted",safe=False)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你好!我看到您的代码可能引起了一些问题。
request.method
始终是充分资本化的,因此您应该使用字符串'put'
而不是'put>'put'
在此行:试图访问它时,您正在向路线添加尾斜线(/gitapi/repo/authoo /),但是
urlpatterns
中设置的模式设置为斜线:您可以使用
re_path()
而不是path()
设置正则url模式,无论您是否添加tailting slash,(?
)从一到更多。/?
匹配单个可选/
。您的路由
'repo/&lt; str:u_repo_name&gt;'
在变量u_repo_name
中捕获字符串。此变量作为关键字参数提供到视图userreposapi()
,但当前视图仅接受id
kwarg。您应该添加u_repo_name
kwarg作为可选参数,或者使视图接受其他关键字参数,并使用** kwargs
:修复这3个问题应使路线工作。
Hi! I see a few issues with your code that might be causing this problem.
request.method
is always full capitalized, so you should use the string'PUT'
instead of'Put'
on this line:You are adding a trailing slash to your route when trying to access it (/gitapi/repo/authoo/), but the pattern set in
urlpatterns
doesn't have this trailing slash:You can use
re_path()
instead ofpath()
to set a regex URL pattern that works whether you add a trailing slash or not:(?P<U_repo_name>\w+)
creates a named group calledU_repo_name
that matches any word character ([a-zA-Z0-9_]
) from one to more times./?
matches a single optional/
.Your route
'repo/<str:U_repo_name>'
captures a string in the variableU_repo_name
. This variable is provided to the viewuserreposapi()
as a keyword argument, but the view currently only accepts theid
kwarg. You should either add theU_repo_name
kwarg as an optional argument or make the view accept other keyword arguments with**kwargs
:Fixing these 3 issues should make the route work.
我认为URL中的落后斜线是问题所在。我不应该在那里。
I think the trailing slash in the url is the problem. I should be not there.