如何对 Sequel 数据库使用 "select * FROM" 方法?
How to use the "select * FROM" method for Sequel databases?
我一直在研究与数据库交互和在数据库上存储信息。目前,我正在为我的编程开发一个项目 class,我正在尝试创建一个注册页面。此时在我的 signup.html
文件中,表单接受两个输入:用户名和密码。然后一旦提交,它就会转到我的 app.rb
文件中的 post 方法根目录。现在,在那个 app.rb
文件中,在 /sources
根(这是我的 signup.html
文件中表单的 post 方法根)我有它所以输入的凭据是保存在我的数据库中。现在 我想这样做,以便数据库进行交叉检查以确保没有人与刚刚输入的用户名相同。换句话说,如果用户名已被占用,则无法注册。如果用户名被占用,我希望出现一条消息,说明用户需要输入一个新的所需用户名。如果未使用用户名,我希望它重定向到我创建的 home.html
文件。我做了研究,发现这样做的方法是使用 SELECT column_name FROM table_name
。但是我不知道把这段代码放在哪里。它是否在我的 app.rb
文件中的 /sources
根目录下?
非常感谢任何帮助。这是我的代码:
在我的 signup.html
文件中:
<p>Please fill out the information below to sign up.</p>
<form action = "/sources" method="post">
Username: <input type="text" name ="username" placeholder="Username"></br>
Password: <input type="password" name ="password" placeholder="Password"></br>
<input type="submit" value="Submit">
</form>
在我的 app.rb
文件中:
require 'sinatra'
require 'sequel'
require 'rubygems'
require 'simple-rss'
require 'open-uri'
DB = Sequel.connect('sqlite://test.db')
get '/chart' do
DB.create_table(:db) do
primary_key :id
String :username
String :password
end
#I realize this is not a professional way of creating the database
# but I'm not looking for how to change this at the moment
end
post '/sources' do
@username = params[:username]
@password = params[:password]
@items = DB[:db]
@items.insert(:username => @username, :password => @password)
end
get '/signup' do
redirect 'signup.html'
end
如果您以专业的方式执行此操作,您会将应用拆分为多个层。在路由内部,您将处于业务或逻辑层,然后将数据请求移交给数据库层。数据库层可能由 ORM(如 Sequel、Datamapper 或 ActiveRecord 等)处理,您可以在那里查询数据库、处理新用户的创建等,然后向逻辑层报告,逻辑层可以然后决定将用户引导至哪条路线和信息。
看看 Sequel documentation on models 并设置一个 User
模型来处理这些事情,然后返回一个 User
实例或(可能)nil
,类似的东西。您将需要模型中的 self.exists?
等方法。
如果您不打算也使用 migrations (hint: you should, it's just as quick) you may want to add a DB.table_exists?
方法,您真的应该将 create table 语句移出路由。
在用户名列中添加 unique constraint 可能也是个好主意。
我一直在研究与数据库交互和在数据库上存储信息。目前,我正在为我的编程开发一个项目 class,我正在尝试创建一个注册页面。此时在我的 signup.html
文件中,表单接受两个输入:用户名和密码。然后一旦提交,它就会转到我的 app.rb
文件中的 post 方法根目录。现在,在那个 app.rb
文件中,在 /sources
根(这是我的 signup.html
文件中表单的 post 方法根)我有它所以输入的凭据是保存在我的数据库中。现在 我想这样做,以便数据库进行交叉检查以确保没有人与刚刚输入的用户名相同。换句话说,如果用户名已被占用,则无法注册。如果用户名被占用,我希望出现一条消息,说明用户需要输入一个新的所需用户名。如果未使用用户名,我希望它重定向到我创建的 home.html
文件。我做了研究,发现这样做的方法是使用 SELECT column_name FROM table_name
。但是我不知道把这段代码放在哪里。它是否在我的 app.rb
文件中的 /sources
根目录下?
非常感谢任何帮助。这是我的代码:
在我的 signup.html
文件中:
<p>Please fill out the information below to sign up.</p>
<form action = "/sources" method="post">
Username: <input type="text" name ="username" placeholder="Username"></br>
Password: <input type="password" name ="password" placeholder="Password"></br>
<input type="submit" value="Submit">
</form>
在我的 app.rb
文件中:
require 'sinatra'
require 'sequel'
require 'rubygems'
require 'simple-rss'
require 'open-uri'
DB = Sequel.connect('sqlite://test.db')
get '/chart' do
DB.create_table(:db) do
primary_key :id
String :username
String :password
end
#I realize this is not a professional way of creating the database
# but I'm not looking for how to change this at the moment
end
post '/sources' do
@username = params[:username]
@password = params[:password]
@items = DB[:db]
@items.insert(:username => @username, :password => @password)
end
get '/signup' do
redirect 'signup.html'
end
如果您以专业的方式执行此操作,您会将应用拆分为多个层。在路由内部,您将处于业务或逻辑层,然后将数据请求移交给数据库层。数据库层可能由 ORM(如 Sequel、Datamapper 或 ActiveRecord 等)处理,您可以在那里查询数据库、处理新用户的创建等,然后向逻辑层报告,逻辑层可以然后决定将用户引导至哪条路线和信息。
看看 Sequel documentation on models 并设置一个 User
模型来处理这些事情,然后返回一个 User
实例或(可能)nil
,类似的东西。您将需要模型中的 self.exists?
等方法。
如果您不打算也使用 migrations (hint: you should, it's just as quick) you may want to add a DB.table_exists?
方法,您真的应该将 create table 语句移出路由。
在用户名列中添加 unique constraint 可能也是个好主意。