我正在使用Pyramid和Beaker会话创建一个webapp.
我想request.session['user_id']在成功登录后存储用户ID 和其他一些信息,然后用它来检查用户是否已登录:
if 'user_id' in request.session:
# user signed in
else:
# user not signed in or session is expired
Run Code Online (Sandbox Code Playgroud)
现在的问题是:是否可以安全地依赖于会话或将是更好的和/或使用更安全金字塔的authenticated_userid()与remember()和forget()从pyramid.security?
我是网络应用程序开发的新手,我刚刚开始构建一个(相对较大的)webapp.到目前为止,我一直在使用Django,但是,我刚刚读到了金字塔,我真的很喜欢它的声音:它的文档读得很好,它似乎很容易从小到大的项目扩展,它很自豪性能,它的开发人员似乎很喜欢它.所有美好的事物.它看起来也非常灵活,很适合我的需求.但是,我担心Pyramid的用户群.
例如,在stackoverflow上,"金字塔"标签本周出现了6个问题,而"django"标签已经看到247.我知道金字塔开发人员致力于回答开发人员的任何问题,但是,这并没有完全解决我放心了.我只是不确定我是否会因为选择一个拥有如此庞大的社区的框架而冒风险.我担心的是:
无论如何,如果有经验的开发人员可以给我一些关于所有这些的反馈,我会很高兴.选择Pyramid而不是Django,我将承担多少风险?更一般地说,通过选择较旧技术而不是旧技术?
这似乎微不足道,但我找不到这个问题的有效答案.
假设我有两个不同的链接'/'和'/ home',我希望它们指向同一个视图.(这表示用户是打开xyz.com还是xyz.com/home,将显示相同的页面).
在金字塔我试过
config.add_route('home','/')
config.add_route('home','home/')
Run Code Online (Sandbox Code Playgroud)
但它引发了以下异常
pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions
For: ('route', 'home')
Run Code Online (Sandbox Code Playgroud)
我该如何实现呢?
我正在使用SQLAlchemy-0.7.8制作Pyramid应用程序.我使用的是64位Python3.2.
问题是,为什么以下函数不向数据库提交任何内容?
def create_card(sText,sCard):
"""
create a wildcard instance if all is well (ie,sCard match in sText)
return
oCard, dCard
otherwise return False,False
"""
oMatch = re.search(sCard,sText)
if oMatch:
oCard = WildCard()
#set up some stuff about the WildCard
DBSession.add(oCard)
DBSession.flush()
dCard = {
'id' : oCard.id,
'span' : oMatch.span(),
'card' : oCard.card_string,
}
return oCard,dCard
return False,False
Run Code Online (Sandbox Code Playgroud)
我从另一个脚本导入DBSession.它的定义如下:
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Run Code Online (Sandbox Code Playgroud)
这是一些背景信息:
我正在制作的应用程序用于通过使用正则表达式来表征大块HTML.如果应用程序卡住并且认为应该为一段文本匹配wilcard,那么将为用户提供一个小表格来填写.一旦表单被提交,就会调用create_card.如果通配符与字符串匹配,则创建WildCard实例.
WildCard类没有什么特别之处,它只存储一个字符串和一些整数.如果我打印出dCard,看起来WildCard已经成功提交,因为它有一个整数id.如果我没有在数据库会话上调用flush,则dCard ['id']为None.
id字段如下所示:
id = Column(Integer,Sequence('wild_seq'), primary_key=True)
Run Code Online (Sandbox Code Playgroud)
添加和刷新行会导致以下控制台输出:
2012-09-16 12:30:34,845 INFO [sqlalchemy.engine.base.Engine][Dummy-2] INSERT INTO wildcard_wildcards (card_string, …Run Code Online (Sandbox Code Playgroud) 我使用MongoDB作为我的主要(并且直到现在)数据库,因为谷歌及其提供的链接我在Django或金字塔之间感到困惑.
我对python很满意,但从未在python中进行过Web开发(我已经在PHP中完成了).现在因为我将使用Mongo所以我不会使用Django ORM会带走人们与Django相关联的易用性吗?
我是Django的新手(只需几个小时),所以我不确定ORM影响框架的哪些部分.
或者我应该使用带有django mongodb引擎的django fork django-norel(虽然它们没有被主动维护)或者我应该使用Pyramid,因为我打算使用jinja2作为我的模板层,这使得django的两部分对我无用.
从django中取出这些电池后,它仍然是一个有截止日期的人的框架吗?
建议吗?
我安装在我的新Windows 8(x64)中:
我试图运行我的金字塔项目:
pserve I:\Projects\PyramidProject\development.ini
Run Code Online (Sandbox Code Playgroud)
和pkg_resources.DistributionNotFound(req)被引发:

I:\Projects\MyProject>pserve development.ini Traceback (most recent
call last): File "C:\Python27\Scripts\pserve-script.py", line 9, in
<module>
load_entry_point('pyramid==1.4b1', 'console_scripts', 'pserve')() File
"C:\Python27\lib\site-packages\pyramid-1.4b1-py2.7.egg\pyramid\scripts\ps
erve.py", line 50, in main
return command.run() File "C:\Python27\lib\site-packages\pyramid-1.4b1-py2.7.egg\pyramid\scripts\ps
erve.py", line 301, in run
relative_to=base, global_conf=vars) File "C:\Python27\lib\site-packages\pyramid-1.4b1-py2.7.egg\pyramid\scripts\ps
erve.py", line 332, in loadserver
server_spec, name=name, relative_to=relative_to, **kw) File "C:\Python27\lib\site-packages\pastedeploy-1.5.0-py2.7.egg\paste\deploy\l
oadwsgi.py", line 255, in loadserver
return loadobj(SERVER, uri, name=name, **kw) File "C:\Python27\lib\site-packages\pastedeploy-1.5.0-py2.7.egg\paste\deploy\l
oadwsgi.py", line 271, in loadobj
global_conf=global_conf) File "C:\Python27\lib\site-packages\pastedeploy-1.5.0-py2.7.egg\paste\deploy\l
oadwsgi.py", line 296, …Run Code Online (Sandbox Code Playgroud) 我想从我的会话中分离一个类的实例,但它仍然可以读取(不发出查询).我已经扫描了几天的文档,但我尝试的每一种方法都会导致这个消息
DetachedInstanceError: Instance <MyModel at 0x36bb190> is not bound to a Session;
attribute refresh operation cannot proceed
Run Code Online (Sandbox Code Playgroud)
我正在使用zope.sqlalchemyPyramid中的事务管理器.我希望在提交事务后我的对象可用.我只需要它来读取"缓存"值,即在提交事务之前在其中的值.
我能弄清楚的唯一方法是包装类(或属性本身),然后手动跟踪更改(我可以这样做,但它真的很难看,而且根本不是pythonic).
那么有什么方法可以阻止SQLAlchemy尝试刷新这些值?
作为一个后备,我甚至可以只返回None,只要在事务提交后没有抛出上述错误
嗨,我无法理解如何使用sqlalchemy进行外键引用.我在我的数据库中创建了一个新的表客户端:
class Client(DeclarativeBase):
__tablename__ = 'client'
id = Column(Integer, primary_key=True)
user_id = Column(
Integer,
ForeignKey('user.id', ondelete='CASCADE'),
nullable=False,
index=True,
)
orgname = Column(Unicode, nullable=False)
def __init__(self, **kwargs):
super(Client, self).__init__(**kwargs)
Run Code Online (Sandbox Code Playgroud)
不是我想做这样的事情
u = User(user_name=u'dusual')
session.add(u)
c = Client(user=u, orgname="dummy_org")
session.add(c)
Run Code Online (Sandbox Code Playgroud)
但是sqlalchemy喊道:
(K,cls_.名))类型错误:"用户"是用于客户端无效的关键字参数
现在不应该明白,应该允许用户作为关键字参数,我如何确保我的表能够采用用户关键字参数.
是否可以自动将Access-Control-Allow-Origin标题添加到由X-Requested-With金字塔中的ajax请求(带标题)启动的所有响应中?
我已经多次阅读了文档,并搜索了这个问题的答案,但是很简单.具体来说,我已经研究了为服务定义服务和Cornice API以及为资源定义资源.
我目前正在构建一个REST API,它具有与此类似的结构:
GET /clients # Gets a list of clients
GET /clients/{id} # Gets a specific client
GET /clients/{id}/users # Gets a specific clients users
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我应该使用服务或资源还是两者兼而有之?而且,如果两者都是,怎么样?
pyramid ×10
python ×9
sqlalchemy ×3
django ×2
api ×1
cornice ×1
cors ×1
mongodb ×1
python-3.2 ×1
python-3.x ×1
rest ×1
session ×1