Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django模式中按请求分派方法?_Python_Django_Django Urls - Fatal编程技术网

Python 如何在Django模式中按请求分派方法?

Python 如何在Django模式中按请求分派方法?,python,django,django-urls,Python,Django,Django Urls,很清楚如何创建从URL正则表达式发送的URLPattern: (r'^books/$', books), 其中,图书可按要求进一步派送: def books(request): if request.method == 'POST': ... else: ... 我想知道是否有一种惯用方法将request方法包含在URLPattern中,将所有调度/路由信息保存在一个位置,例如: (r'^books/$', GET, retrieve-book

很清楚如何创建从URL正则表达式发送的URLPattern:

(r'^books/$', books),
其中,图书可按要求进一步派送:

def books(request):
    if request.method == 'POST':
        ...
    else:
        ...
我想知道是否有一种惯用方法将request方法包含在URLPattern中,将所有调度/路由信息保存在一个位置,例如:

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

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

无论如何,我回答这个问题的原因是:从您的示例URLConf来看,您似乎正在使用Django构建REST Web服务——如果是这种情况,您可能真的受益于使用相当好的工具来自动创建资源/集合。它使用基于类的处理程序,根据请求中的HTTP方法自动重定向到适当的方法(获取书籍、更新书籍、创建书籍)


更新(四年后!)虽然django活塞仍然存在(并且可以工作),但如今它是一个更加复杂、有文档记录和扩展的选择。

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

if request.method == 'POST':
    ...
然而,也有第三方应用程序和代码段试图使用基于类的视图使方法处理更干净一些。例如,请参见(从中找到)


就我个人而言,我不太确定这是个好主意。标准的Django方法非常简单。。。标准我认为这会在不需要的地方带来额外的混乱和复杂性。

PS-我不想开始一场面包大战,但在我看来,帖子应该转到“创建”,而PUT应该转到“更新”,基于HTTP 1.1规范(这也是django活塞的做法),假设我理解什么是“面包大战”(从字面上看,听起来有点有趣),一些理由充分的小面包被扔到了这里: