Django rest framework 方法处理程序(如.get、.post)和操作(如.list、.create)之间有什么区别

Django rest framework 方法处理程序(如.get、.post)和操作(如.list、.create)之间有什么区别,django-rest-framework,django-rest-viewsets,Django Rest Framework,Django Rest Viewsets,我正在学习Django Rest框架,我注意到的一点是,视图集提供了.list、.post等操作,而不是.get、.post等方法处理程序,而这些处理程序又是由视图提供的。文档中说,操作比方法处理程序更灵活,但我似乎找不到任何理由。您能否分享一些关于为什么视图集使用操作而不是方法处理程序的信息?​ GET和POST是处理表单时唯一使用的HTTP方法 Django的登录表单使用POST方法返回,在该方法中,浏览器将表单数据捆绑起来,对其进行编码以便传输,将其发送到服务器,然后接收其响应 相比之下,

我正在学习Django Rest框架,我注意到的一点是,视图集提供了.list、.post等操作,而不是.get、.post等方法处理程序,而这些处理程序又是由视图提供的。文档中说,操作比方法处理程序更灵活,但我似乎找不到任何理由。您能否分享一些关于为什么视图集使用操作而不是方法处理程序的信息?​

GET和POST是处理表单时唯一使用的HTTP方法

Django的登录表单使用POST方法返回,在该方法中,浏览器将表单数据捆绑起来,对其进行编码以便传输,将其发送到服务器,然后接收其响应

相比之下,GET将提交的数据绑定到一个字符串中,并使用该字符串组成URL。URL包含必须发送数据的地址以及数据键和值。如果您在Django文档中进行搜索,您可以看到这一点,这将生成表单的URL

GET和POST通常用于不同的目的

任何可用于更改系统状态的请求(例如,对数据库进行更改的请求)都应使用POST。GET应仅用于不影响系统状态的请求

GET也不适用于密码表单,因为密码将以纯文本形式出现在URL中,因此也会出现在浏览器历史记录和服务器日志中。它也不适用于大量数据或二进制数据,如图像。对管理表单使用GET请求的Web应用程序存在安全风险:攻击者很容易模仿表单的请求来访问系统的敏感部分。POST与Django的CSRF保护等其他保护相结合,提供了对访问的更多控制

另一方面,GET适用于web搜索表单,因为表示GET请求的URL可以很容易地添加书签、共享或重新提交。

像.GET()和.post()这样的请求处理程序基于http请求方法,而像.create()或.list()这样的操作则是从功能的角度出发的。假设您有一个视图类,它可以按用户id返回单个用户的信息,或按排序顺序返回所有用户。这两个请求都是来自客户端的GET请求,但参数和用途不同。如果您只想在本例中使用.get()处理程序,则需要定义两个视图函数并在url配置中注册这两个url。或者,您可以将ViewSet类或通用视图与具有操作函数.list()和.retrieve()的mixin一起使用来处理这些请求,然后使用router类来设置遵循REST url标准的url配置