扩展: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. python-自定义异常,with用法

    抛出异常 #coding=utf-8 def  exceptionTest(num): if num<0: print "if num<0" raise Excepti ...

  2. python 多进程并发接口测试实例

    #encoding=utf-8 import requests import json import os import hashlib print "register------" ...

  3. HTTP从入门到入土(5)——HTTP报文格式

    HTTP报文格式 HTTP报文分为请求报文和响应报文,只有发送了请求报文,才会有响应报文. 常见的报文格式如下所示:

  4. Python 除法运算

    Python中的除法较其它语言显得非常高端,有套很复杂的规则.Python中的除法有两个运算符,/和// 首先来说/除法: 在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差 ...

  5. C++ 一串数字三位一节,用逗号隔开表示

    #include <iostream> #include <string> #include <sstream> using namespace std; stri ...

  6. 安装VS提示系统找不到指定路径

    解决办法:删除C:\ProgramData\Package Cache快捷方式

  7. UNIX系统的显示时间何时会到尽头

    本文转载自:http://www.cnblogs.com/dfcao/p/expertCprogramming_intr0.html 本文分为三个小块: 一.UNIX系统中时间的存储形式: 二. ti ...

  8. 硬盘分区表知识—详解硬盘MBR

    硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神奇,是因为它具有高速分析处理数据的能力.而这些数据都以文件的形式存储在硬盘 里.不过,计算机可不像人那么聪明.在读取相应的文件时,你必须 ...

  9. linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法

    一.背景 2018年5月24日,笔者的pc已经连续运转两天了,突然要使用有线网卡,却发现有线网卡无法正常工作,于是查看了一下内核日志: r8169 0000:05:00.0 eth0: link do ...

  10. thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?

    在线编辑器有很多很多, 而且大多是开源的. uediotr基于mit协议, 开源, 可以用于商业和非商业的 任意使用和修改都可以 如果两个相连接的 相邻的 元素之间 因为边框重叠 而显得中间的边框线很 ...