from sqlalchemy.ext.declarative import declarative_base, InvalidRequestError
engine = #my engine
session = Session() # created by sessionmaker(bind=engine)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
# then later...
user = User()
user.name = 'Frank'
session.add(user)
try:
session.commit()
print 'welcome to the club Frank'
except InvalidRequestError:
print 'You are not Frank. Impostor!!!'
class FlaskRealmDigestDB(authdigest.RealmDigestDB):
def add_user(self, user, password):
if user in self:
raise AttributeError('HEY! "{}" already exists! \
You can\'t do that'.format(user))
super(FlaskRealmDigestDB, self).add_user(user, password)
def requires_auth(self, f):
# yada yada
或者重写RealmDigestDB,并使其返回不允许重复赋值的内容。例如
class ClosedDict(dict):
def __setitem__(self, name, val):
if name in self and val != self[name]:
raise AttributeError('Cannot reassign {} to {}'.format(name, val))
super(ClosedDict, self).__setitem__(name,val)
class FlaskRealmDigestDB(authdigest.RealmDigestDB):
def newDB():
return ClosedDict()
def requires_auth(self, f):
# yada yada
这完全取决于您的数据库层。Flask是非常特别的而不是与一个特定的ORM系统捆绑在一起,尽管建议使用SQL炼金术。好消息是SQL炼金术有一个独特的限制。在
下面是它的工作原理:
在“然后稍后”之后运行部件两次。第一次你会收到欢迎短信,第二次就不会了
附录:烧瓶最接近于default authentication frameworksimply stores users in a ^{} by username 。检查执行唯一性的方法是手动测试例如
^{pr2}$或重写
RealmDigestDB
以确保在添加之前进行检查:或者重写
RealmDigestDB
,并使其返回不允许重复赋值的内容。例如我把它作为一个附录放在这里,因为这个类不以任何方式持久化数据,如果您打算扩展
authdigest.RealmDigestDB
,那么您应该像上面一样使用SQLAlchemy。在你可以用炼金术。它是一个插件
相关问题 更多 >
编程相关推荐