扩展: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. Git 常用的命令

    基本内容: 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有 ...

  2. 搭建Linux-java web运行环境之二:安装mysql

    环境 OS:Red Hat Enterprise Linux Server release 7.3 (Maipo) JDK:jdk-7u80-linux-x64.tar.gz Tomcat:apach ...

  3. 阿里云服务器ECS web环境配置(LNAP)ubantu

    Ubuntu 系统中,可以使用 apt-get 命令来搭建 LNMP环境.这种方式较编译方式安装更加简便 安装Nginx 1.使用 sudo apt-get install nginx 就能自动安装 ...

  4. Linux基础命令---diff

    diff 逐行比较两个文本文件,把文件的差异显示到标准输出.如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文件,不会比较子目录. 此命令的适用范围:RedHat.RHEL.Ubuntu ...

  5. leetcode_目录

    3Sum Closest 3Sum 4Sum Add Binary Add Two Numbers Anagrams Balanced Binary Tree Best Time to Buy and ...

  6. 自己封装的ajax

    /** * ITCAST WEB * Created by lsy on 2016/5/24. */ /* * 1. 请求的类型 type get post * 2. 请求地址 url * 3. 是异 ...

  7. oracle中如何判断blob类型字段是否为空

    eg.假如有表T_GA_GRJBXX  ,字段zp是blob类型 查询blob非空的记录 SELECT * FROM u_rs_sjgx.T_GA_GRJBXX TB WHERE TB.zp IS n ...

  8. Educational Codeforces Round 21 Problem F (Codeforces 808F) - 最小割 - 二分答案

    Digital collectible card games have become very popular recently. So Vova decided to try one of thes ...

  9. ubuntu16.04下无线网卡无法正常连网

    背景:无线网卡初次连接可以正常上网,但是用了一会儿就会出现无法上网的情况 版本: Ubuntu 16.04 一.分析: 1.使用ifconfig命令发现不会显示无线网卡,说明无线网卡被关闭,笔者输出的 ...

  10. HDU 1686 Oulipo(KMP)题解

    题意:主串中能找到几个模式串 思路:超详细解释KMP KMP:针对这个代码,解释一下Fail数组的含义:T为主串,P为模式串,Fail代表失配值,即当P[j] != T[i]时,j要指向的位置为Fai ...