【问题标题】:how to merge django urls for GET and POST如何为 GET 和 POST 合并 django url
【发布时间】:2020-11-16 23:26:36
【问题描述】:

我需要帮助,当我尝试在单个 url 上路由 GET/POST 请求时遇到了 path() 问题: 当我想添加记录的服务器时,我会在 url 上执行 POST {"serverid":1,"hostname":"test server"}:

/api/服务器/

但有时我想通过 serverid 查询服务器,然后我不得不为 GET 编写另一个 path() 映射:

/api/server//

显然它们都可以在一个视图类/方法中,我相信这是重复的,但是如何将这两个 url 合并到一个路径中?感谢您的帮助。

【问题讨论】:

标签: python django django-rest-framework


【解决方案1】:

您必须只输入 id=None 以便两个 url 都可以访问 并且还放置这样的 url 模式

urls.py

path('test/', views.test, name='test'),
path('test/<int:id>', views.test, name='test'),

views.py

def test(request, id=None):
    posts = Post.objects.all()

查看

class MyView(View):
    def get(self, request,id=None, *args, **kwargs):
        return HttpResponse('Get view!')
    def post(self,request,id=None, *args, **kwargs):
        return HttpResponse('Post view!')   

你也可以像这样将两个视图合二为一

class MyView(View):
    def get(self, request,id=None, *args, **kwargs):
        if id:
            return HttpResponse('Get view with id')
        else:
            return HttpResponse('Get view without id')
    def post(self,request,id=None, *args, **kwargs):
        if id:
            return HttpResponse('Post view with id!')
          
        

【讨论】:

  • 谢谢 Kishan,我是 django 的新手,能否也给我看一个 CBV 示例?真的很感激。
猜你喜欢
  • 2015-05-07
  • 2016-10-26
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2016-05-27
  • 1970-01-01
  • 2012-02-10
相关资源
最近更新 更多