Sinatra 20行代码实现查询CSDN+天涯用户资料

十二 31st, 2011

这次想做标题党,20行只包含Sinatra部分代码,html代码有58行,HTML真是臃肿呀。

很早就听说Sinatra写小网站很爽,一直没时间来折腾。
今天抽空再学现用,发现Sinatra上手真的很快,直接找个示例一看就懂,以后小东西就没必要用Rails了。

功能很简单:提供一个输入框供用户输入关键字(key),用户点查询时搜索数据库,查出csdn和天涯数据库中用户名或email与key匹配的记录,并返回结果。

文件目录

|–app.rb
|–model.rb
|–views
  |–index.erb

1、使用active_record访问数据库

Active Record可以独立于Rails使用,之前有过介绍,这次也用它来访问mysql。

#model.rb
require 'active_record'
ActiveRecord::Base.establish_connection(adapter: "mysql2", encode: "utf8", host: "localhost", username: "root", password: "***", database: "***")

#Csdn类会自动对应csdns表
class Csdn < ActiveRecord::Base
end

#Tianya类会自动对应tianyas表
class Tianya < ActiveRecord::Base
end

2、Sinatra部分代码

#app.rb
require 'sinatra'
require File.join(File.dirname(__FILE__),'model')

# get "/"接收对根目录的get请求
get "/" do
  #可以接收请求中的参数
  @key = params[:key]
  #如果参数来为空,说明是查询请求
  unless @key.blank?
  @csdns = Csdn.where("email=? or username=?", @key, @key )
  @tianyas = Tianya.where("email=? or username=?", @key, @key )
  end

  #Sinatra可以渲染erb模板
  erb :index
end

Sinatra可以渲染erb模板,也支持haml模板,图方便就用了erb。用实例变量(@开头)是因为它可以在erb中直接被访问。
所有模板都是放到views目录下。

3、index.erb代码如下

html代码真臭!

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  <title>Your missing hack tool</title>
  </head>
  <body>
    <h1>Your missing hack tool(CSDN + Tianya)</h3>
    <form action="/" method="get">
        search for:
		<input type="text" name="key" value="<%= @key if @key %>">
        <input type="submit" value="submit">
    </form>
    <% if @key %>
        <div id="result">
            <div id="csdn">
                <% unless @csdns.blank? %>
                    <h3>Csdn results: </h3>
                    <table>
                        <tr>
                            <td>name</td>
                            <td>email</td>
                            <td>pwd</td>
                        </tr>
                        <% @csdns.each do |entry| %>
                        <tr>
                            <td><%= entry.username %></td>
                            <td><%= entry.email %></td>
                            <td><%= entry.password %></td>
                        </tr>
                        <% end %>
                    </table>
                <% end %>
            </div>
            <div id="tianya">
                <% unless @tianyas.blank? %>
                    <h3>Tianya results: </h3>
                    <table>
                        <tr>
                            <td>name</td>
                            <td>email</td>
                            <td>pwd</td>
                        </tr>
                        <% @tianyas.each do |entry| %>
                        <tr>
                            <td><%= entry.username %></td>
                            <td><%= entry.email %></td>
                            <td><%= entry.password %></td>
                        </tr>
                        <% end %>
                    </table>
                <% end %>
            </div>
        </div>
    <% end %>
  </body>
</html>

4、启动

ruby app.rb

默认使用WEBrick作为服务器,4567端口。
ruby app.rb -p 3000可以指定启动端口。
现在可以直接访问http://127.0.0.1:4567/使用了。

本来想把这个程序发布出来供大家使用,但由于服务器硬盘太小,数据库纯数据有1.5G,再建个索引要近3G,所以就只分享下代码。
Ruby真的是越玩越舒服了哈~

>>原创文章,欢迎转载。转载请注明:转载自Ruby迷,谢谢!
>>原文链接地址:Sinatra 20行代码实现查询CSDN+天涯用户资料
  1. PikachuEXE
    一 1st, 201216:31

    haml较好啦…
    臭是因为一个档案放全部内容吧…