如何重用基于 DRF 类的视图 POST 方法?

时间:2021-04-28 11:06:50

标签: python django django-rest-framework

现在想复用BundleList的post方法。我要么找出绝对 URL 并使用 from curses import wrapper import curses def main(stdscr): mY = curses.LINES win = curses.newwin(100,50,0,50) win.keypad(True) numbers = [n for n in range(0,1001)] ylen = len(numbers) iny = 0 border_y = mY-5 def scroll(window): [window.addstr(y, 0, f'{b} \n') for y, b in enumerate(numbers[iny:iny+border_y])] window.refresh() scroll(win) ### KEY PRESS ### while(True): ch = win.getkey() if ch == 'KEY_UP': if(iny>0): iny-=1 scroll(win) elif ch == 'KEY_DOWN': if(iny<ylen-border_y): iny+=1 scroll(win) elif ch == 'q': break wrapper(main) 发送请求。

第二种方法是在视图函数中通过 requests.post(URL) 重用。但我无法设置 return BundleList.as_view()(request)。请求数据是不可变的。

当我尝试使用

request.data = data

它只是给了我:

url = reverse_lazy(BundleList.as_view(), request=request)
print(f"{url = }")

BundleList 是一个基于类的视图,带有 get 和 post 方法。

NoReverseMatch at /generateSampleBundle/
Reverse for 'my_app.views.BundleList' not found. 'my_app.views.BundleList' is not a valid view function or pattern name.

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您应该为您的视图设置 name 并在 reverse_lazy()

中使用该名称

例如:

drfurlpatterns = [  # DRF URL endpoints
    path('bundles/', views.BundleList.as_view()), name='bundle-list'
]

然后

url = reverse_lazy('bundle-list', request=request)

看,docs

另外,要知道为什么 request.data 有时是不可变的 see this question

相关问题