【发布时间】:2017-02-07 09:36:22
【问题描述】:
我一直在努力让 Flask 应用程序在我的 IIS 服务器上运行,并通过以下链接取得了一些进展:
http://netdot.co/2015/03/09/flask-on-iis
话虽如此,当我通过 IIS 部署时尝试使用“请求”python 模块时,我遇到了麻烦。当我在本地启动应用程序时,它运行良好——也就是说,如果我通过终端启动应用程序,我会在请求 JSON 数据时得到正确的 响应
> python app.py。
本质上,应用程序通过其 API 从我的 Stash 存储库请求 JSON 数据。 Stash 的 API 需要对此获取请求进行用户身份验证。 requests 模块让它变得很容易......我尽可能避免使用原始 HTML(网络新手......>.
当部署在 IIS 上时,我在 Python 中收到以下错误异常,但不确定原因:
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
您可以参考下面的整个代码(省略机密内容)。 基本上,我有一个使用用户凭据的 login.html 页面。 然后,我使用这些凭据发送 get 请求
try:
reqLib = requests.get('https://stash/rest/api/latest/projects/PLAN/repos/sqlquerylibrary/files?at=refs%2Fheads%2Fmaster&limit=100000', auth=(usr, pwd), verify=False)
except Exception as e:
return str(e)
整个应用程序:
import requests
from flask import Flask, render_template, redirect, url_for, request, send_from_directory
from flask_login import LoginManager, UserMixin, login_required, login_user
import sys
import os
app = Flask(__name__)
login_manager = LoginManager()
login_manager.init_app(app)
user = ''
reqLib = ''
#Add headers to force no-cache
@app.after_request
def add_header(r):
r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"
r.headers["Cache-Control"] = "public, max-age=0"
return r
#post-processing/loading screen -- you can ignore this route
@app.route("/scripting")
@login_required
def script():
scrape()
return redirect(url_for('display'))
#Page displays AFTER a successful <200> response
@app.route("/sqlLibraryDisplay",methods=["GET"])
@login_required
def display():
return send_from_directory("static","index.html")
#Login Page
@app.route('/sqlLibrary', methods=['GET', 'POST'])
def login():
error = None
global reqLib
global user
if request.method == 'POST':
#Grabs username & password entered by user
usr = str(request.form['username'])
pwd = str(request.form['password'])
#Requests SQL Library list from Stash repository
try:
reqLib = requests.get('https://stash/rest/api/latest/projects/PLAN/repos/sqlquerylibrary/files?at=refs%2Fheads%2Fmaster&limit=100000', auth=(usr, pwd), verify=False)
except Exception as e:
return str(e)
if reqLib.status_code != 200:
error = 'Invalid Credentials. Please try again.'
else:
user = User(usr,pwd)
login_user(user)
return redirect(url_for('script'))
return render_template('login.html', error=error)
@login_manager.user_loader
def load_user(id):
global user
global reqLib
if user != '':
if reqLib.status_code == 200:
return user
return None
class User(UserMixin):
def __init__(self, name, id, active=True):
self.name = name
self.id = id
self.active = active
def is_active(self):
return self.active
def is_anonymous(self):
return False
def is_authenticated(self):
return True
def scrape():
#confidential. Just some post-processing using reqLib data.
if __name__ == "__main__":
app.config["SECRET_KEY"] = "MAD_SECRET_KEY"
app.run()
【问题讨论】:
标签: python json iis flask python-requests