如何在Django URLpatterns中调度请求方法?

Rob*_*ell 14 python django django-urls

很清楚如何创建一个从URL正则表达式调度的URLPattern:

(r'^books/$', books),
Run Code Online (Sandbox Code Playgroud)

这里的书可以根据要求的方法,还派遣:

def books(request):
    if request.method == 'POST':
        ...
    else:
        ...
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种惯用的方法在URLPattern中包含请求方法,将所有调度/路由信息保存在一个位置,例如:

(r'^books/$', GET, retrieve-book),
(r'^books/$', POST, update-books),
(r'^books/$', PUT, create-books),
Run Code Online (Sandbox Code Playgroud)

Ste*_*lim 6

它作为单一视图方法完成的原因是您通常将某种页面内容呈现为您要提交的表单的上下文.

无论如何,我回复它的原因是:从你的样本URLConf那里看起来你正在用Django构建一个REST web服务 - 如果是这样的话,你可能真的会受益于使用相当不错的django-piston来自动创建你的资源/集合.它使用基于类的处理程序,它基于请求中的HTTP方法自动重定向到适当的方法(获取书籍,更新书籍,创建书籍)

更新(四年后!)虽然django-piston仍然存在(并且有效),但Django REST框架现在是一个更加复杂,记录和扩展的选择.

  • PS - 不想开始打包,但在我看来POST应该去'创建',PUT应该根据HTTP 1.1规范进行'更新'(这也是django中完成的事情) -活塞) (3认同)