Views
Sinatra中,默认所有的页面都放在views目录下,而且其支持多个html模板系统,比方说,haml,erb等等。这儿以Haml为例,其他的模板系统使用方法类似。 Haml可以帮助我们更有效的编写HTML文件。在Sinatra,使用haml非常方便,只需要在文件头引入haml即可:
require 'haml'
使用:
get '/' do
haml :index
end
当访问主页面时, 服务器会查找views目录下的index.haml文件返回。
!!!
%html(lang="en" )
%head
%title Note
%body Welcome to Note
Layout,CSS
对于同一个系统,多个页面的布局大多数情况都是一样的,为了更好的重用代码,Sinatra支持Layout, 即你只需要返回自己修改的内容部分,页面的布局可以指定一个模板,默认情况下,sinatra会默认选择名为layout.haml的文件作为模板。 首先,创建一个layout.haml, 然后把模板代码移动到该文件中, 同时,使用“”=yield“”,指定自己修改部分的位置:
!!!
%html(lang="en" )
%head
%title Note
%body
=yield
这样,就可以移除index.haml代码中的多余部分,index.haml就只剩下一行代码“Welcome to Note”。
如果你不想使用默认的模板名字,或者想在系统中支持多套模板,Sinatra支持自己指定layout, 用法如下:
get '/' do
haml :index, {:layout => :[your own layout name]}
end
另外,Sinatra默认把所有的静态资源文件放在public目录下,本例程中,使用了Bootrstrap作为UI模板,因此,下载了最新的Bootstrap文件解压到public目录下。同时为了实现footer样式,还创建自己的css文件note.css,置于public目录下。最后构建出的模板代码如下:
!!!
%html(lang="en" )
%head
%title Note
%meta(charset="utf-8")
%meta(name="viewport" content="width=device-width, initial-scale=1.0" )
%link(href="/bootstrap/css/bootstrap.css" rel="stylesheet" )
%link(href="/bootstrap/css/bootstrap-responsive.css" rel="stylesheet" )
%link(href="/note.css" rel="stylesheet" )
%link(href="/favicon.ico" rel="shortcut icon" type="image/x-icon" )
%body
%div(id="wrap")
%div(class="container" )
=yield
%div(id="footer" )
%div(class="container" )
%p(class="muted credit" ) Example for Sinatra,Power by @xianlinbox
Database
在Rails的世界,你只能选择ActiveRecord来做ORM,在Sinatra中,你除了可以继续使用ActiveRecord以外,你还有其他的选项,比如备受推崇的Data_Mapper.为了简单起见,本例程中使用了Data_mapper + Sqlite3来做数据库服务。首先,安装data_mapper和其对于sqlite3的适配器:
gem install data_mapper dm-sqlite-adapter
然后,连接数据库,并创建Domain对象:
require 'data_mapper'
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")
class Note
include DataMapper::Resource
property :id, Serial
property :content, String
property :create_at, DateTime
property :completed_at, DateTime
end
DataMapper.auto_upgrade!
其中“DataMapper.setup(:default, ENV[‘DATABASE_URL’] || “sqlite3://#{Dir.pwd}/development.db”)” 在初始化数据库连接,如果用户没有设置“DATABASE_URL”环境变量,则使用本地的sqlite数据库,这样可以很轻松的在各个环境使用不同的数据库。最后一句“DataMapper.auto_upgrade!”表示如果有数据有任何的改动,Database会自动升级,为开发者省去一大烦恼。
写完之后,可以在irb环境测试Domain对象已可工作:
RESTFUL与CRUD操作
在现代软件开发中,对于Web服务的接口,大部分的程序员都已经倾向于选择RESTFUL形式的接口,Sinatra对此提供了完美的支持。在Sinatra完美的支持了HTTP的POST,GET,PUT,DELETE,其对应的对象操作就是Create,Read,Update和Delete。本例中就是按照这样的风格实现的web interface。
* 使用POST方法创建Note
post '/' do
note = Note.new(:content => params[:content])
if note.save
status 201
else
status 412
end
redirect '/'
end
* 使用GET方法获取Note
get '/note/:id' do
@note = Note.get(params[:id])
haml :note
end
* 使用PUT方法更新Note
put '/note/:id' do
Note.get(params[:id]).update(:content => params[:content], :completed_at => DateTime.strptime(params[:completed_at],'%Y-%m-%dT%H:%M:%S%z' ))
redirect '/'
end
* 使用DELETE方法删除Note
delete '/note/:id' do
note = Note.get(params[:id])
note.destroy
redirect '/'
end
其实,从底层实现来说,Sinatra只是通过DSL来封装了请求的路由,在Sinatra中除了这几个方法之外,还有很多的路由特性,比方说Conditions, 它可以让你根据request头部的信息决定具体使用那一个路由,这可以让系统轻松针对不同的平台做不同的实现:
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
"You're using Songbird version #{params[:agent][0]}"
end
get '/foo' do
# Matches non-songbird browsers
end
关于Sinatra的Route更多信息
最后效果完成图如下:
主页:
Update页面:
Delete页面:
源代码地址:
https://github.com/xianlinbox/Note
- 大小: 24.4 KB
- 大小: 51.3 KB
- 大小: 46.6 KB
- 大小: 40.6 KB
分享到:
相关推荐
Ruby-Padrino是一个基于Sinatra的全功能Web开发框架,它为开发者提供了更高级别的抽象和组织结构,使得创建复杂的Web应用变得更加简单高效。在Ruby社区中,Sinatra被誉为轻量级、简洁的HTTP服务器接口库,而Padrino...
### JumpStart Sinatra 教程详解 #### 一、引言 Sinatra 是一款轻量级的 Ruby Web 框架,以其简洁性、灵活性而著称。...无论是想要快速构建原型应用还是开发完整的 Web 项目,Sinatra 都是一个值得考虑的选择。
Sinatra在Ruby世界里以其简洁、高效的语法而著名,使得开发者能快速构建Web应用。Pinatra同样致力于提供这样的体验,为PHP开发者提供一种轻量级、面向表达式的Web开发解决方案。 【描述】提到"Sinatra的一个PHP复制...
Sinatra::Synchrony是 Sinatra的一个小扩展,它动态提升了Sinatra网络应用的并发性。由于EventMachine和EM-Synchrony的支持,当你有很多 传输和低速IO请求时(如向外部APIs发送的HTTP请求),它增加了你的应用每个...
almost-sinatra, Sinatra 重构,现在只有六个行 比一双袜子更受欢迎 几乎 Sinatra "until programmers stop acting like obfuscation is morally hazardous,they're not artists, just kid
Ruby-RedisDashboard是基于Sinatra框架构建的一个轻量级Web应用,专为监控Redis服务器设计。这个应用提供了一个直观的界面,可以展示关于Redis服务器的各种关键性能指标和状态信息,帮助开发者实时了解Redis数据库的...
Sinatra是一个轻量级的Ruby框架,用于构建Web应用程序。它以其简洁、直观的语法著称,使得开发者能够快速地搭建RESTful Web服务。在"sinatra-template-源码.rar"这个压缩包中,我们有机会深入理解Sinatra的工作原理...
Java Fry 是一个基于Java语言的轻量级Web框架,其设计灵感来源于Ruby的Sinatra框架。Sinatra以其简洁明了的语法和高效的工作流程而受到开发者喜爱,Java Fry旨在为Java开发者提供相似的开发体验,使得构建Web应用变...
sinatra-pubsub, 为 Sinatra 推送&流 Sinatra::PubSubPubSub是对 Sinatra的扩展,它增加了使用HTML5服务器发送事件的基本发布/订阅流。例如客户端可以订阅以下事件:var es = new EventSource('/subscribe
一个简单的Sinatra起点 Sinatra Bootstrap支持: Sinatra Bootstrap的目的是什么? 我创建Sinatra Bootstrap是为了使Sinatra项目具有一致的起点。 我喜欢在每个项目中都可以使用Haml,Sass和Compass,同样,jQuery...
Sinatra快速入门模板使用方式如下: $ quik new sinatra这将下载并运行 starter向导脚本( )。 导致: Hello from the sinatra quick starter wizard scriptQ: Name of the sinatra app? [hola]: holaThanks! Ready...
RESTaurant_App是一个专门为餐厅设计的小型销售点(POS)系统,它利用了Sinatra框架来构建其应用程序接口(API)。Sinatra是一个轻量级、基于Ruby的web开发框架,允许开发者快速地创建HTTP服务和web应用。这个项目...
综上所述,restaurant_POS_app 结合了 Sinatra、PostgreSQL 和 JavaScript(Backbone.js),构建了一个跨平台的餐厅点餐系统,它集成了后端数据处理和前端用户交互,为餐厅提供了便捷、可靠的订单管理服务。
比尔德 bildr是使用Ruby和Sinatra后端以及MaterializeCSS前端构建HTML5 Web应用程序。 创建bildr的目的是允许在英雄联盟客户端之外... 设置一个名为LOL_KEY的系统环境变量,并将其设置为等于Riot Games API密钥。 如
在异步API服务的构建上,Sinatra虽然没有Rails那样的庞大生态系统,但其轻便和灵活的特点使它成为一个不错的选择。 Grape是一个专注于构建RESTful API的DSL(领域特定语言),它允许开发者以声明式的方式定义API...
**Sinatra简介** ...通过阅读并理解“sinatra-example”项目,你可以更好地了解如何用Sinatra构建一个基础的Web服务,同时掌握Ruby语言和Sinatra框架的基本用法。这将对你的Ruby Web开发技能提升大有裨益。
Sinatra是一个轻量级的Ruby web框架,它使得构建web应用变得更加简单快捷。 描述中的信息与标题相同,没有提供额外的细节,因此我们将主要基于Sinatra框架本身及其基础应用进行讨论。 标签 "源码" 暗示这个压缩包...
西纳特拉克隆 SinatraClone 不存在与 Sinatra 战斗至死。 SinatraClone 甚至不存在就一定是好的... SinatraClone 作为一个项目存在,我正在截屏,教人们如何使用 Ruby 和 Rack 编写代码以创建 Web 框架。 可以在上找到
总的来说,Ruby-Sinatra-SampleApp结合了Ruby的灵活性,Sinatra的简洁性和Sequel的数据库管理能力,提供了一个快速开发Web应用的模板。开发者可以通过这个样本应用学习如何有效地组合这些工具,创建出自己的Web服务...
这是一个使用 Sinatra 和 Redis 构建的 dockerized 示例 JSON API。 我希望有人能从中吸取教训。 这个例子真的很小,并且使用了和的 Docker 库容器。 最有趣的部分是您必须进行的更改才能在 Docker 容器之间启用...