Web2py + MS SQL Server 2008 R2 + LDAP身份验证HelloWorld应用程序?

2 投票
2 回答
1732 浏览
提问于 2025-04-17 05:24

我在很棒的 *nix 环境下使用 Web2py 已经有一段时间了,同时也在用开源的数据库管理系统(像 MySQL、Postgre、SQLite 等)来做我的个人项目。

在我的工作单位,完全是在 .Net 环境下工作,我需要快速做一个网页应用(员工基本信息维护),这个应用要能在本地局域网运行,并且需要有身份验证和用户角色管理。

我打算在 Web2py 上开发这个应用,并且想把它部署在默认的 Rocket 服务器上,但我在使用数据访问层(DAL)时遇到了麻烦。我尝试过 pyodbc、mssql、mssql2 这些适配器,以及大家在 Google 群组和其他论坛上分享的各种解决办法。

我的生产和部署环境的具体信息是:

操作系统:MS Windows Server 2008
数据库:MS SQL Server 2008 R2(通过局域网托管,并使用 Windows 身份验证,而不是 SQL 身份验证)
Python 版本:2.7
Web 服务器:理想情况下是 IIS 7.0,但我也可以使用 Rocket。

有没有什么“HelloWorld”应用的教程可以涵盖以下主题:

  1. 在 Web2py 中使用 Windows 域身份验证和用户角色
  2. Web2py 与 MSSQL Server 2008 R2 的数据访问层(DAL)
  3. Web2py 在 IIS 7.0 上的部署

如果有人能帮我,我完成后可以把这个作为 Web2py 的一个实例分享出来。

2 个回答

0

是的,Jay说得对,关于LDAP的部分。我确实对ldap_auth.py的登录方法做了一些修改,才能让它在我们的域上正常工作,但似乎不是每个人都需要这样做。你可以查看这个链接:https://groups.google.com/forum/?pli=1#!searchin/web2py/LDAP/web2py/jyFl1CXUy0s/TXld4CEdlEcJ,另外还有一个(非常简单的)教程在这里:http://www.web2pyslices.com/slices/take_slice/145

对于我来说,Web2py的DAL在MSSSQL 2008 R2上运行得很好,只需要把连接放在models.py里就行。

#tell the dal where your MSSQL db is
db = DAL('mssql://username:password@db_server/database_name')

不过,我使用的是SQL Server身份验证,而不是Windows身份验证。查看一下pyodbc连接字符串文档,看起来可以通过在连接字符串中添加Trusted_Connection=yes来实现——我自己还没试过,可能还需要对gluon/dal.py做一些修改。

还有,记得定义你的表格——可以参考官方文档:http://web2py.com/book/default/chapter/06

至于IIS的部分我就不太清楚了——在web2py的Google小组里提到过几次,还有一个教程在这里:http://www.web2pyslices.com/slices/take_slice/128,可能会对你有帮助。就我个人而言,我在Windows上也只是用Apache来运行web2py。

我强烈建议你在web2py的Google小组上提问,那里的关注度会更高。

0

这是一个部分回答,主要讲的是如何使用Active Directory进行身份验证(我想这和域身份验证是一样或相似的)。我不是Windows方面的专家,但有本地的Windows管理员帮我。下面是我在web2py这个应用的db.py文件中写的代码。

if localauth:
    # I set localauth to 1 when using the app on my home lan, else 0
    # I am a consultant and not always connected to the client VPN
    # FYI, I do have a db of same type and name with same user/pw at home
    # in this case use the basic login that comes as default with web2py
    pass
else:
    from gluon.contrib.login_methods.ldap_auth import ldap_auth
    auth.settings.login_methods = [ldap_auth(mode='ad',
                                             server='<server ip address>',
                                             base_dn='<base_dn>')]
    # the above line forces active directory to be the ONLY authentication method
# my base_dn looked like this: 'OU=<ou>,DC=<subdomain>,DC=<domain>,DC=<tld e.g. com, net, edu, etc.>'
# an active directory knowledgeable person can help you here

Jay

撰写回答