sinatra制作简易登录页面

来源:互联网 发布:淘宝假货 猪哼少 编辑:程序博客网 时间:2024/05/20 02:27

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>"endfile.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 => 120configure do  enable :sessions  set :username, 'frank'  set :passwordmd5, '0efe415c937f6858550a6378f4f3f374'  #'sinatra'endget '/' do    if session[:admin] == true        redirect to('start')    else        redirect to('login')    endendget '/login' do  erb :loginendpost '/login' do    if params[:username] == settings.username && Digest::MD5.hexdigest(params[:password]) == settings.passwordmd5        session[:admin] = true        redirect to('start')    else        erb :login    endendget '/start' do    halt(401,'Not Authorized') unless session[:admin]    erb :startendget '/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')    endend
表示sinatra收到针对根的get请求后,会读取session中保存的admin,如果为true,说明已经成功登录,就会将请求直接路由到start页面,否则将会路由到login页面。

get '/login' do  erb :loginend
表示收到对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    endend
这里针对login页面的post操作进行处理,判断用户名、密码的md5是否验证通过,如果验证通过则将session中的admin置为true,然后重定向页面到start,否则将重新显示登录页面。

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


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



0 0