MongoDB 如何开始使用 Bottle-Cork?
How to get started on using Bottle-Cork with MongoDB?
我对 Bottle and Cork 还很陌生。我正在开发一个使用 Bottle 作为框架并使用 MongoDB 作为后端的网络应用程序。我想弄清楚如何使用 Cork 实现用户登录系统。
我阅读了 Cork 的文档和示例,并尝试进行设置。我已经成功地用 Mongodb 连接了 cork 实例,因为我看到了数据库名称,我将其作为参数(后端)传递给 Cork() 构造函数,显示在 mongo shell 中.但是后来就不知道怎么继续了。
我阅读了所有 Cork 方法的源代码,它们对我来说都很有意义。但是其中很多都需要有一个具有足够角色级别的用户才能被称为 "list_roles()" 或 "create_users()"。我知道它们旨在由管理员调用。但我的问题是,当我最初根本没有用户时,如何开始创建一些用户并进行测试?
以下是我目前得到的,我只需要一些简单的指导或示例代码即可开始。如果有任何帮助,我将不胜感激!
文件名:api.py
from cork import Cork
from cork.backends import MongoDBBackend
from bottle import Bottle, redirect, static_file, request, response,HTTPResponse, HTTPError, abort, debug,run, route
import bottle
from beaker.middleware import SessionMiddleware
import pymongo
session_opts = {
'session.type': 'cookie',
'session.validate_key': True,
'session.cookie_expires': True,
'session.timeout': 3600 * 24, # 1 day
'session.encrypt_key': 'lxy3344',
}
app = bottle.app()
app = SessionMiddleware(app, session_opts)
mb = MongoDBBackend(db_name='corkTry')
aaa = Cork(backend=mb, email_sender='kkgghhyy@gmail.com')
def postd():
return bottle.request.forms
def post_get(name, default=''):
return bottle.request.POST.get(name, default).strip()
# LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN #
@bottle.route('/')
@bottle.get('/login')
def login():
print aaa.current_user()
redirect('/static/login.html')
@bottle.post('/login')
def login():
print 'in post login'
"""Authenticate users"""
username = post_get('username')
password = post_get('password')
aaa.login(username, password, success_redirect='/home', fail_redirect='/login')
# REGISTER # # REGISTER # # REGISTER # # REGISTER # # REGISTER # # REGISTER #
@bottle.get('/register')
def register():
redirect('/static/register.html')
@bottle.post('/register')
def register():
# Send out register email
aaa.register(post_get('username'), post_get('password'), post_get('email_address'))
return 'Please check your mailbox.'
@bottle.route('/validate_registration/:registration_code')
def validate_registration(registration_code):
# Validate registration, create user account
aaa.validate_registration(registration_code)
return 'Thanks. <a href="/login">Go to login</a>'
@bottle.route('/static/<filepath:path>',method='GET')
def serve_static(filepath):
return static_file(filepath, root='./static/' )
@bottle.route('/home')
def home():
return '''This is the home page'''
bottle.debug(True)
bottle.run(app=app,reloader = True)
好吧,我从没想过我要在 Whosebug 上 post 的第一个答案就是我自己的问题的答案,但我只是碰巧弄明白了,我真的很想分享它!!
我的第一个问题是我不知道如何在 Mongodb 数据库中创建第一个用户来测试 Cork 的功能。我尝试的第一件事是调用 Cork 提供的 register() 方法。但它引发了异常,因为我没有在数据库中定义任何角色。因此我需要先在数据库中创建角色。
我使用了在此 link:
找到的代码
https://github.com/FedericoCeratto/bottle-cork/blob/master/examples/simple_webapp_using_mongodb.py
我刚刚将方法复制到我的代码中:
def populate_mongodb_backend():
mb = MongoDBBackend(db_name='corkTry', initialize=True)
# mb.users._coll.insert({
# "login": "admin",
# "email_addr": "admin@localhost.local",
# "desc": "admin test user",
# "role": "admin",
# "hash": "cLzRnzbEwehP6ZzTREh3A4MXJyNo+TV8Hs4//EEbPbiDoo+dmNg22f2RJC282aSwgyWv/O6s3h42qrA6iHx8yfw=",
# "creation_date": "2012-10-28 20:50:26.286723"
# })
mb.roles._coll.insert({'role': 'admin', 'val': 100})
mb.roles._coll.insert({'role': 'editor', 'val': 60})
mb.roles._coll.insert({'role': 'user', 'val': 50})
return mb
(我不想直接使用我上面注释掉的代码创建admin用户,因为如果我那样做,我将无法轻易知道密码,hash是直接传入的,所以我将无法登录该用户)
(但是,如果你想直接使用我上面注释掉的代码创建用户,有一种方法可以做到。你只需要使用与 Cork 在其源代码中使用的相同的哈希方法. 只需将你的密码传入 hash 方法并打印出返回的哈希。然后将哈希传递到以下注释掉的代码中以创建用户。这样你就会知道密码并能够登录你创建的用户)
然后执行方法(只需一次!)在数据库中创建角色:
populate_mongodb_backend()
然后执行Cork提供的register方法注册一个新用户:
aaa.register('yourLogin','yourPassword','yourEmail@example.com',email_template='./views/registration_email.tpl')
registration_email.tpl:
<p>Hi {{username}}! Click <a href="localhost:8080/validate_registration/{{registration_code}}">HERE</a> to finish your registration</p>
然后用户应该在Mongodb中的"pending_registrations"中显示,您可以通过在mongo中执行以下命令来检查 shell:
use corkTry
db.pending_registrations.find()
然后你只需要去你的邮箱点击link完成注册,然后你就可以签入Mongodb执行:
db.users.find()
关于设置电子邮件发送的附加信息(我只试过 Gmail):
您需要先确保您的Gmail账户启用了IMAP,然后进行如下设置:
smtp_url='starttls://yourGmailUsername:yourGmailPassword@smtp.gmail.com:587'
aaa = Cork(backend=mb, email_sender='yourGmailUsername@gmail.com',smtp_url=smtp_url)
你可以参考下面的issue了解更多细节,这是我找到有关电子邮件设置的信息的地方:
我对 Bottle and Cork 还很陌生。我正在开发一个使用 Bottle 作为框架并使用 MongoDB 作为后端的网络应用程序。我想弄清楚如何使用 Cork 实现用户登录系统。
我阅读了 Cork 的文档和示例,并尝试进行设置。我已经成功地用 Mongodb 连接了 cork 实例,因为我看到了数据库名称,我将其作为参数(后端)传递给 Cork() 构造函数,显示在 mongo shell 中.但是后来就不知道怎么继续了。
我阅读了所有 Cork 方法的源代码,它们对我来说都很有意义。但是其中很多都需要有一个具有足够角色级别的用户才能被称为 "list_roles()" 或 "create_users()"。我知道它们旨在由管理员调用。但我的问题是,当我最初根本没有用户时,如何开始创建一些用户并进行测试?
以下是我目前得到的,我只需要一些简单的指导或示例代码即可开始。如果有任何帮助,我将不胜感激!
文件名:api.py
from cork import Cork
from cork.backends import MongoDBBackend
from bottle import Bottle, redirect, static_file, request, response,HTTPResponse, HTTPError, abort, debug,run, route
import bottle
from beaker.middleware import SessionMiddleware
import pymongo
session_opts = {
'session.type': 'cookie',
'session.validate_key': True,
'session.cookie_expires': True,
'session.timeout': 3600 * 24, # 1 day
'session.encrypt_key': 'lxy3344',
}
app = bottle.app()
app = SessionMiddleware(app, session_opts)
mb = MongoDBBackend(db_name='corkTry')
aaa = Cork(backend=mb, email_sender='kkgghhyy@gmail.com')
def postd():
return bottle.request.forms
def post_get(name, default=''):
return bottle.request.POST.get(name, default).strip()
# LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN #
@bottle.route('/')
@bottle.get('/login')
def login():
print aaa.current_user()
redirect('/static/login.html')
@bottle.post('/login')
def login():
print 'in post login'
"""Authenticate users"""
username = post_get('username')
password = post_get('password')
aaa.login(username, password, success_redirect='/home', fail_redirect='/login')
# REGISTER # # REGISTER # # REGISTER # # REGISTER # # REGISTER # # REGISTER #
@bottle.get('/register')
def register():
redirect('/static/register.html')
@bottle.post('/register')
def register():
# Send out register email
aaa.register(post_get('username'), post_get('password'), post_get('email_address'))
return 'Please check your mailbox.'
@bottle.route('/validate_registration/:registration_code')
def validate_registration(registration_code):
# Validate registration, create user account
aaa.validate_registration(registration_code)
return 'Thanks. <a href="/login">Go to login</a>'
@bottle.route('/static/<filepath:path>',method='GET')
def serve_static(filepath):
return static_file(filepath, root='./static/' )
@bottle.route('/home')
def home():
return '''This is the home page'''
bottle.debug(True)
bottle.run(app=app,reloader = True)
好吧,我从没想过我要在 Whosebug 上 post 的第一个答案就是我自己的问题的答案,但我只是碰巧弄明白了,我真的很想分享它!!
我的第一个问题是我不知道如何在 Mongodb 数据库中创建第一个用户来测试 Cork 的功能。我尝试的第一件事是调用 Cork 提供的 register() 方法。但它引发了异常,因为我没有在数据库中定义任何角色。因此我需要先在数据库中创建角色。
我使用了在此 link:
找到的代码https://github.com/FedericoCeratto/bottle-cork/blob/master/examples/simple_webapp_using_mongodb.py
我刚刚将方法复制到我的代码中:
def populate_mongodb_backend():
mb = MongoDBBackend(db_name='corkTry', initialize=True)
# mb.users._coll.insert({
# "login": "admin",
# "email_addr": "admin@localhost.local",
# "desc": "admin test user",
# "role": "admin",
# "hash": "cLzRnzbEwehP6ZzTREh3A4MXJyNo+TV8Hs4//EEbPbiDoo+dmNg22f2RJC282aSwgyWv/O6s3h42qrA6iHx8yfw=",
# "creation_date": "2012-10-28 20:50:26.286723"
# })
mb.roles._coll.insert({'role': 'admin', 'val': 100})
mb.roles._coll.insert({'role': 'editor', 'val': 60})
mb.roles._coll.insert({'role': 'user', 'val': 50})
return mb
(我不想直接使用我上面注释掉的代码创建admin用户,因为如果我那样做,我将无法轻易知道密码,hash是直接传入的,所以我将无法登录该用户)
(但是,如果你想直接使用我上面注释掉的代码创建用户,有一种方法可以做到。你只需要使用与 Cork 在其源代码中使用的相同的哈希方法. 只需将你的密码传入 hash 方法并打印出返回的哈希。然后将哈希传递到以下注释掉的代码中以创建用户。这样你就会知道密码并能够登录你创建的用户)
然后执行方法(只需一次!)在数据库中创建角色:
populate_mongodb_backend()
然后执行Cork提供的register方法注册一个新用户:
aaa.register('yourLogin','yourPassword','yourEmail@example.com',email_template='./views/registration_email.tpl')
registration_email.tpl:
<p>Hi {{username}}! Click <a href="localhost:8080/validate_registration/{{registration_code}}">HERE</a> to finish your registration</p>
然后用户应该在Mongodb中的"pending_registrations"中显示,您可以通过在mongo中执行以下命令来检查 shell:
use corkTry
db.pending_registrations.find()
然后你只需要去你的邮箱点击link完成注册,然后你就可以签入Mongodb执行:
db.users.find()
关于设置电子邮件发送的附加信息(我只试过 Gmail):
您需要先确保您的Gmail账户启用了IMAP,然后进行如下设置:
smtp_url='starttls://yourGmailUsername:yourGmailPassword@smtp.gmail.com:587'
aaa = Cork(backend=mb, email_sender='yourGmailUsername@gmail.com',smtp_url=smtp_url)
你可以参考下面的issue了解更多细节,这是我找到有关电子邮件设置的信息的地方: