sinatra制作简易登录页面

sinatra 是基于ruby语言实现的http路由框架,通过sinatra可以高效率实现web框架,要想了解sinatra的流程,可以参考

http://wangsheng2008love.blog.163.com/blog/static/7820168920133145425544/

http://www.sinatrarb.com/intro-zh.html

本文中用到了erb模板,其风格与php类似,就是在html中通过嵌入<? ... ?> 执行ruby语句、<?= ...?>执行ruby语句并给html中的变量赋值,比如:

<meta http-equiv="refresh" content="10">
<h2>ttt.c</h2>
<%
str = ""
File.open(".ttt.c") do |file|
while line = file.gets
 str += line
 str += "<br>"
end
file.close();
end
%>

<%= str %>
这里实现的是读取文件内容,并定时10秒进行刷新


好了废话不多说了,下面开始介绍使用sinatra框架 + erb模板,开发登录页面login.rb的过程,lgoin.rb文件的内容如下:

require 'rubygems' #注意:如果你的Ruby版本低于1.9,需要在代码第一行添加:"require 'rubygems'"
require 'sinatra'
require 'sass'
require 'digest/md5'

use Rack::Session::Pool, :expire_after => 120


configure do
  enable :sessions
  set :username, 'frank'
  set :passwordmd5, '0efe415c937f6858550a6378f4f3f374'  #'sinatra'
end

get '/' do
    if session[:admin] == true
        redirect to('start')
    else
        redirect to('login')
    end
end

get '/login' do
  erb :login
end

post '/login' do
    if params[:username] == settings.username && Digest::MD5.hexdigest(params[:password]) == settings.passwordmd5
        session[:admin] = true
        redirect to('start')
    else
        erb :login
    end
end

get '/start' do
    halt(401,'Not Authorized') unless session[:admin]
    erb :start
end

get '/logout' do
    session.clear
    redirect to('/login')
end
其中,use Rack::Session::Pool, :expire_after => 120  表示,session的过期时间为120秒,即登陆了成功后,120秒内无操作,session将无效

然后:

configure do
  enable :sessions
  set :username, 'frank'
  set :passwordmd5, '0efe415c937f6858550a6378f4f3f374'
end
表示,启用session功能,并将用户名固定为frank,密码的MD5值

之后就是对http请求进行路由,其中get、post都是指http的请求类型。比如,

get '/' do
    if session[:admin] == true
        redirect to('start')
    else
        redirect to('login')
    end
end
表示sinatra收到针对根的get请求后,会读取session中保存的admin,如果为true,说明已经成功登录,就会将请求直接路由到start页面,否则将会路由到login页面。

get '/login' do
  erb :login
end
表示收到对login页面的请求后,将显示erb模板login的内容,即login.erb文件。通常模板文件都会保存在views目录下,login.erb的内容如下:

<form action="/login" method="post">
  Name: <input type="text" name="username" />
  Password: <input type="password" name="password" />
  <input type="submit" value="Log in" />
</form>
就是定义了一个username文本框、password密码框、一个提交按钮。按下这个按钮就会触发post操作
post '/login' do
    if params[:username] == settings.username && Digest::MD5.hexdigest(params[:password]) == settings.passwordmd5
        session[:admin] = true
        redirect to('start')
    else
        erb :login
    end
end
这里针对login页面的post操作进行处理,判断用户名、密码的md5是否验证通过,如果验证通过则将session中的admin置为true,然后重定向页面到start,否则将重新显示登录页面。

get '/start' do
    halt(401,'Not Authorized') unless session[:admin]
    erb :start
end
浏览器请求start页面,如果没有登录成功,会触发401错误,并显示Not Authorized


执行ruby -o 0.0.0.0 -p 80 login.rb命令,在浏览器中输入服务器的ip,就可以开始登录页面了



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值