请求和响应:类ActionController::Base ; 类ActionDispatch::Request
扩展:ActionController::Base < Metal
2个基本主题:
- Get and Show
- do and redirect
Requests
每个请求,由router决定了controller和action keys。剩下的请求参数,the session, 和所有http headers会通过request accessor方法被制造出来给action,然后action被执行。
完全的请求对象可以通过请求accessor方法使用。主要用于查询HTTP headers。例如:
def server_ip
location = request.env["REMOTE_ADDR"]
render plain: "This server hosted at #{location}"
end
Parameters
所有请求参数,无论是来自URL中的查询字符串还是表格通过a POST request提交的data, 都可以用params方法返回一个hash。
例子:一个action被执行,通过/post?category=All&limit=5。 params中就会包括{"category" => "All", "limit" => 5}
例子:类似表格
<input type="text" name="post[name]" value="david">
<input type="text" name="post[address]" value=":">
提交后会params中包括{"post" => {"name" => "david", "address" => "hyacintvej"}}
Session
用于在请求之间储存对象的。使用session方法,通过a hash来储存对象。例子:
储存:session[:person] = Person.authenticate(user_name, password)
取出:seesion[:person]
设置为nil : session[:person] = nil
移除: reset_session
session默认储存在浏览器cookie中。
Response
每个action都会导致a response, 它会把headers, document发送给用户浏览器。
实际的请求对象是自动的通过用户的renders和redirects产生的,无需用户干涉。
Renders
Action Controller发送内容给用户,通过渲染方法(五种类型中的一种)。
常见的是渲染template。
包括在Action Pack中的是Action View, 它能渲染ERB模版。它是自动配置的。
controller传递实例变量给view。
Redirects
用于从一个action移动到另外一个action。
例子:redirect_to action: 'show', id: @entry.id 或者 redirect_to entry_path(@entry)
⚠️
这是一个 额外的HTTP-level redirection,会让浏览器发送第二个请求(a GET to the show action),
可不是内部re-routing,在一个request中同时调用create方法然后调用show方法(❌想法)
实例方法:
request: 返回一个 ActionDispatch::Request实例来响应当前的请求。
response:Returns an ActionDispatch::Response that represents the current response.
ActionDispatch::Request < Object
方法:
# get "/articles"
request.fullpath # => "/articles"
request.headers["Content-Type"] # => "text/plain"
parmas() /parameters()返回GET/Post参数在一个hash中。
ActionDispatch::Response < Object
由controller action生成的HTTP response对象。
用来检索当前response的状态,或者客制化response。也可以代表一个真正的HTTP response(即 发送给浏览器),或者一个TestResponse
方法:
response.status = 404
response.message # => "Not Found"
response.content_type = "text/plain"
ActionDispatch::Integration::RequestHelpers
get, post , delete put, patch, head方法都是用到了process(:方法, path, **args)
例子
process :get, '/author', params: { since: 201501011400 }
请求和响应:类ActionController::Base ; 类ActionDispatch::Request的更多相关文章
- 序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口
今日内容概要 序列化多表操作 请求与相应 视图组件 内容详细 1.序列化多表操作 模型类 models.py中 # 新建django项目 # 创建表 模型类models.py中: from djang ...
- 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】
之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...
- C++ - 派生类访问模板基类(templatized base class)命名
派生类访问模板基类(templatized base class)命名 本文地址: http://blog.csdn.net/caroline_wendy/article/details/239936 ...
- java通过当前请求得到访问者ip的工具类
在我们开发的过程中,也许有下面的这样的需求,就是要记录一下每次访问服务器的ip,需要存到数据库,以便以后进行数据分析等... 下面给大家介绍一个通过当前请求得到访问者ip的工具类 IpUtil.jav ...
- (GoRails)链接link_to到当前页current Page 并使用参数 (类ActionController::Parameters)
https://gorails.com/episodes/rails-link-to-current-page-with-params?autoplay=1 如何链接到当前页并增加,移除,或者修改UR ...
- wpf 错误 执行了 QueryInterface 调用,请求提供 COM 可见的托管类“BoilerMonitoringV1._0.MapControl”的默认 IDispatch 接口。
在做wpf嵌入地图时,在自定义的WebBrowser 里面使用JavaScript调用外部方法的时报的错误 在原来的WinForm里 我们只要在窗体类设置的头部设置个 [System.Runtime. ...
- Django底层剖析之一次请求到响应的整个流程
As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...
- CakePHP之请求与响应对象
请求与响应对象 请求与响应对象在 CakePHP 2.0 是新增加的.在之前的版本中,这两个对象是由数组表示的,而相关的方法是分散在RequestHandlerComponent,Router,Dis ...
- django从请求到响应的过程深入讲解
django启动 我们在启动一个django项目的时候,无论你是在命令行执行还是在pycharm直接点击运行,其实都是执行'runserver'的操作,而ruserver是使用django自带的的we ...
随机推荐
- 深入理解 Java 内存模型(一)- 内存模型介绍
深入理解 Java 内存模型(一)- 内存模型介绍 深入理解 Java 内存模型(二)- happens-before 规则 深入理解 Java 内存模型(三)- volatile 语义 深入理解 J ...
- 关于JavaScript的数组随机排序
昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(functi ...
- python网络编程之一
套接字的详细介绍会在另一篇博文指出,此片博文主要是python套接字的简单客户端编写. 两种套接字介绍: 面向连接的套接字:面向连接的套接字提供序列化,可靠的和不重复的数据交付.面向连接是可靠的传输, ...
- Java的各种加密算法
Java的各种加密算法 JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中,是否被篡改过. BASE64 严格地说,属 ...
- linux查看是否能访问外网及拥有的公网IP
linux查看是否能访问外网及拥有的公网IP linux查看是否能访问外网及拥有的公网IP: 1,测访问外网能力:curl -l http://www.baidu.com 2,测访问外网能力:wget ...
- c++随机数及rand()的缺陷
c++生成随机整数和浮点数如下: #include <random> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...
- SVC(STM32)
这两个都是 system level service,有什么区别呢?…… 手册上说 SVC 这个指令是同步的,而 PendSV 是异步的,请问是什么意思呢?…… 高手路过尽请留言啊
- 如何使用python来对二维数组进行排序
1.复合排序 直接用numpy的lexsort就可以 import numpy as np data = np.array([[1,2,3,4,5], [1,2,3,6,7], [2,3,4,5,7] ...
- shell下如何删除文件的某一列
答:cat file | awk '{$1=null;print $0}' (删除第一列)
- BZOJ2654: tree 二分答案+最小生成树
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...