我需要从我的Django站点打开SQLServer报告。我可以通过在会话中存储URL后重定向到Django视图中的报表服务器URL来实现这一点,即:
def show_report(request):
return redirect(request.session.get('_reporturl'))
这很好但我想避免ReportServer提示输入用户名和密码。我得出结论(可能不正确),最好的方法是使用HTTP基本身份验证。
我在基础身份验证的另一篇文章中找到了以下代码:
import urllib2, base64
username = '<username>'
password = '<password>'
request = urllib2.Request(request.session.get('_reporturl'))
base64string = base64.standard_b64encode('%s:%s' % (username, password))
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
但是我无法在视图中使用它(Django视图需要返回HTTPResponse,因此我不确定如何使用此代码)。
我尝试了以下内容:
return redirect('http://<username>:<password>@' + request.session.get('_reporturl'))
这似乎将基本身份验证数据传递给报表服务器,但我还得到了几个用户名和密码的提示。
有没有人设法在Django中使用基本身份验证,或者是否有人设法在不提示身份验证的情况下打开SQLServer报告?
答案 0 :(得分:0)
通过将Apache配置为代理到报表服务器来管理解决此问题:
LoadModule proxy_html_module modules/mod_proxy_html/mod_proxy_html.so
LoadModule xml2enc_module modules/mod_proxy_html/mod_xml2enc.so
Include modules/mod_proxy_html/proxy_html.conf
# set up proxy for SQL Server reports
<Location /ReportServer/>
ProxyPass http://<reportserver>/ReportServer/
ProxyPassReverse http://<reportserver>/ReportServer/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyHTMLEnable On
ProxyHTMLURLMap http://<reportserver>/ReportServer/ /ReportServer/
# Base64 encoding of "username:password"
RequestHeader set Authorization "Basic <base64 encoded string>"
</Location>
mod_proxy_html是从http://www.apachelounge.com/download/win32/modules-2.2/mod_proxy_html-3.1.2-win32.zip下载的第三方模块 - 打开zip并将mod_proxy_html文件夹转储到Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ modules下。必要的配置包含在上一节中。 (它似乎包含在Apache的更高版本中。)
mod_proxy_html可能不是绝对必要的 - 我认为ProxyPassReverse指令是重要的 - 所以如果它导致问题,你可以删除三行执行LoadModule / Include并删除Location部分中的ProxyHTML行。