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

时间:2010-06-03 08:31:00

标签: python django django-urls

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

(r'^books/$', books),

图书可以根据请求方式进一步发送:

def books(request):
    if request.method == 'POST':
        ...
    else:
        ...

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

(r'^books/$', GET, retrieve-book),
(r'^books/$', POST, update-books),
(r'^books/$', PUT, create-books),

2 个答案:

答案 0 :(得分:6)

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

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

更新(四年后!),而django-piston仍然存在(并且有效),django-piston是一种更加复杂,记录和扩展的选择。

答案 1 :(得分:1)

标准Django没有任何机制来区分请求方法,除了你在第二个片段中使用的方法:

if request.method == 'POST':
    ...

但是,有些第三方应用和代码片段尝试使用基于类的视图使方法处理更加清晰。例如,请参阅this snippet(从this SO question about class views找到)。

就个人而言,我不太确定这是个好主意。标准的Django方法是如此......标准......我认为这会引入额外的混乱和复杂性,而不需要它。