django restframwork put和delete不工作

发布于 2025-02-04 08:14:34 字数 2120 浏览 1 评论 0原文

对我来说很好。 但是,放在删除我使用“ 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小兔几 2025-02-11 08:14:34

你好!我看到您的代码可能引起了一些问题。

  1. request.method始终是充分资本化的,因此您应该使用字符串'put'而不是'put>'put'在此行:

      elif request.method =='put':
     
  2. 试图访问它时,您正在向路线添加尾斜线(/gitapi/repo/authoo /),但是urlpatterns中设置的模式设置为斜线:

      path('repo/&lt; str:u_repo_name&gt;',view = userreposapi),
     

    您可以使用 re_path() 而不是path()设置正则url模式,无论您是否添加tailting slash,

      re_path(r'repo/(?p&lt; u_repo_name&gt; \ w+)/?
     

    (?)从一到更多。 /?匹配单个可选/

  3. 您的路由'repo/&lt; str:u_repo_name&gt;'在变量u_repo_name中捕获字符串。此变量作为关键字参数提供到视图userreposapi(),但当前视图仅接受id kwarg。您应该添加u_repo_name kwarg作为可选参数,或者使视图接受其他关键字参数,并使用** kwargs

     #两个都是有效的:
    def userreposapi(请求,id = 0,u_repo_name = none):
        ...
    def userreposapi(请求,id = 0,** kwargs):
        ...
     

修复这3个问题应使路线工作。

Hi! I see a few issues with your code that might be causing this problem.

  1. request.method is always full capitalized, so you should use the string 'PUT' instead of 'Put' on this line:

    elif request.method=='Put':
    
  2. 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:

    path('repo/<str:U_repo_name>',view=userreposapi),
    

    You can use re_path() instead of path() to set a regex URL pattern that works whether you add a trailing slash or not:

    re_path(r'repo/(?P<U_repo_name>\w+)/?', view=userreposapi),
    

    (?P<U_repo_name>\w+) creates a named group called U_repo_name that matches any word character ([a-zA-Z0-9_]) from one to more times. /? matches a single optional /.

  3. Your route 'repo/<str:U_repo_name>' captures a string in the variable U_repo_name. This variable is provided to the view userreposapi() as a keyword argument, but the view currently only accepts the id kwarg. You should either add the U_repo_name kwarg as an optional argument or make the view accept other keyword arguments with **kwargs:

    # Both are valid:
    def userreposapi(request, id=0, U_repo_name=None):
        ...
    def userreposapi(request, id=0, **kwargs):
        ...
    

Fixing these 3 issues should make the route work.

绝不服输 2025-02-11 08:14:34

我认为URL中的落后斜线是问题所在。我不应该在那里。

http://localhost:8000/gitapi/repo/authoo  # here I removed the trailing slash.

I think the trailing slash in the url is the problem. I should be not there.

http://localhost:8000/gitapi/repo/authoo  # here I removed the trailing slash.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文