扩展: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的更多相关文章

  1. 序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口

    今日内容概要 序列化多表操作 请求与相应 视图组件 内容详细 1.序列化多表操作 模型类 models.py中 # 新建django项目 # 创建表 模型类models.py中: from djang ...

  2. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  3. C++ - 派生类访问模板基类(templatized base class)命名

    派生类访问模板基类(templatized base class)命名 本文地址: http://blog.csdn.net/caroline_wendy/article/details/239936 ...

  4. java通过当前请求得到访问者ip的工具类

    在我们开发的过程中,也许有下面的这样的需求,就是要记录一下每次访问服务器的ip,需要存到数据库,以便以后进行数据分析等... 下面给大家介绍一个通过当前请求得到访问者ip的工具类 IpUtil.jav ...

  5. (GoRails)链接link_to到当前页current Page 并使用参数 (类ActionController::Parameters)

    https://gorails.com/episodes/rails-link-to-current-page-with-params?autoplay=1 如何链接到当前页并增加,移除,或者修改UR ...

  6. wpf 错误 执行了 QueryInterface 调用,请求提供 COM 可见的托管类“BoilerMonitoringV1._0.MapControl”的默认 IDispatch 接口。

    在做wpf嵌入地图时,在自定义的WebBrowser 里面使用JavaScript调用外部方法的时报的错误 在原来的WinForm里 我们只要在窗体类设置的头部设置个 [System.Runtime. ...

  7. Django底层剖析之一次请求到响应的整个流程

    As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...

  8. CakePHP之请求与响应对象

    请求与响应对象 请求与响应对象在 CakePHP 2.0 是新增加的.在之前的版本中,这两个对象是由数组表示的,而相关的方法是分散在RequestHandlerComponent,Router,Dis ...

  9. django从请求到响应的过程深入讲解

    django启动 我们在启动一个django项目的时候,无论你是在命令行执行还是在pycharm直接点击运行,其实都是执行'runserver'的操作,而ruserver是使用django自带的的we ...

随机推荐

  1. 深入理解 Java 内存模型(一)- 内存模型介绍

    深入理解 Java 内存模型(一)- 内存模型介绍 深入理解 Java 内存模型(二)- happens-before 规则 深入理解 Java 内存模型(三)- volatile 语义 深入理解 J ...

  2. 关于JavaScript的数组随机排序

    昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(functi ...

  3. python网络编程之一

    套接字的详细介绍会在另一篇博文指出,此片博文主要是python套接字的简单客户端编写. 两种套接字介绍: 面向连接的套接字:面向连接的套接字提供序列化,可靠的和不重复的数据交付.面向连接是可靠的传输, ...

  4. Java的各种加密算法

    Java的各种加密算法 JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中,是否被篡改过. BASE64 严格地说,属 ...

  5. linux查看是否能访问外网及拥有的公网IP

    linux查看是否能访问外网及拥有的公网IP linux查看是否能访问外网及拥有的公网IP: 1,测访问外网能力:curl -l http://www.baidu.com 2,测访问外网能力:wget ...

  6. c++随机数及rand()的缺陷

    c++生成随机整数和浮点数如下: #include <random> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...

  7. SVC(STM32)

    这两个都是 system level service,有什么区别呢?…… 手册上说 SVC 这个指令是同步的,而 PendSV 是异步的,请问是什么意思呢?…… 高手路过尽请留言啊

  8. 如何使用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] ...

  9. shell下如何删除文件的某一列

    答:cat file | awk '{$1=null;print $0}' (删除第一列)

  10. BZOJ2654: tree 二分答案+最小生成树

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...