Python CGI:持久化会话密钥
Python CGI: Persistence with Session Keys
这里完全是新手!
我正在尝试使用 API 为 SUSE Manager 创建一个简单的 Web 界面。我遇到的问题不是 SUSE Manager,而是 CGI。现在,我只想完成两件事:
1) 用户输入 SUSE Manager 的用户名和密码的登录屏幕。
2) 登录后,用户有多个链接用于 运行 应用程序的不同 API 调用。
在 index.html 文件中,我有用于登录并将用户名和密码值提交给 "auth.py" 的表单。
<html>
<title>Login</title>a/
<body>
<b>SuSE Manager Tools</b><br /><br />
<form action="/cgi-bin/auth.py" method="POST">
Username: <input type="text" name="username">
Password: <input type="password" name="password"><br /><br />
<input type="submit" value="Submit" />
</form>
</body>
</html>
然后 "auth.py" 通过服务器进行身份验证并生成会话密钥。当 运行ning API 程序调用时,此密钥将用于以后的所有身份验证。
#!/usr/bin/python2.7
import cgi, cgitb, xmlrpclib, os
print "Content-type: text/html\r\n\r\n"
cgitb.enable()
form = cgi.FieldStorage()
MANAGER_URL = "http://susemanager"
MANAGER_LOGIN = form.getvalue('username')
MANAGER_PASSWORD = form.getvalue('password')
client = xmlrpclib.Server(MANAGER_URL, verbose=0)
key = client.auth.login(MANAGER_LOGIN, MANAGER_PASSWORD)
现在我有一堆单独的“.py”文件,运行 这些过程调用。在这一点上,我会向用户提供几个指向 运行 指定过程的链接。我的问题是,将这些会话密钥传递给 .py 文件以便它们可以针对服务器进行身份验证的好方法是什么?
也许我做错了?也许 CGI 不是答案。现在似乎有很多围绕 CGI 的争论不是最好的选择,而且它已经过时了。也许我应该研究 WSGI,或者您认为对于如此简单的事情,CGI 仍然是更好的选择?
谢谢大家。
使用 Flask 和内置的 'session' 模块,我能够像这样完成这项工作:
from flask import Flask, render_template, session, request, redirect, url_for
import xmlrpclib
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
session['user'] = request.form['username']
session['passwd'] = request.form['password']
return redirect(url_for('menu'))
return render_template('login.html')
@app.route('/menu/')
def menu():
user = session.get('user', None)
passwd = session.get('passwd', None)
感谢您的帮助!
这里完全是新手!
我正在尝试使用 API 为 SUSE Manager 创建一个简单的 Web 界面。我遇到的问题不是 SUSE Manager,而是 CGI。现在,我只想完成两件事:
1) 用户输入 SUSE Manager 的用户名和密码的登录屏幕。
2) 登录后,用户有多个链接用于 运行 应用程序的不同 API 调用。
在 index.html 文件中,我有用于登录并将用户名和密码值提交给 "auth.py" 的表单。
<html>
<title>Login</title>a/
<body>
<b>SuSE Manager Tools</b><br /><br />
<form action="/cgi-bin/auth.py" method="POST">
Username: <input type="text" name="username">
Password: <input type="password" name="password"><br /><br />
<input type="submit" value="Submit" />
</form>
</body>
</html>
然后 "auth.py" 通过服务器进行身份验证并生成会话密钥。当 运行ning API 程序调用时,此密钥将用于以后的所有身份验证。
#!/usr/bin/python2.7
import cgi, cgitb, xmlrpclib, os
print "Content-type: text/html\r\n\r\n"
cgitb.enable()
form = cgi.FieldStorage()
MANAGER_URL = "http://susemanager"
MANAGER_LOGIN = form.getvalue('username')
MANAGER_PASSWORD = form.getvalue('password')
client = xmlrpclib.Server(MANAGER_URL, verbose=0)
key = client.auth.login(MANAGER_LOGIN, MANAGER_PASSWORD)
现在我有一堆单独的“.py”文件,运行 这些过程调用。在这一点上,我会向用户提供几个指向 运行 指定过程的链接。我的问题是,将这些会话密钥传递给 .py 文件以便它们可以针对服务器进行身份验证的好方法是什么?
也许我做错了?也许 CGI 不是答案。现在似乎有很多围绕 CGI 的争论不是最好的选择,而且它已经过时了。也许我应该研究 WSGI,或者您认为对于如此简单的事情,CGI 仍然是更好的选择?
谢谢大家。
使用 Flask 和内置的 'session' 模块,我能够像这样完成这项工作:
from flask import Flask, render_template, session, request, redirect, url_for
import xmlrpclib
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
session['user'] = request.form['username']
session['passwd'] = request.form['password']
return redirect(url_for('menu'))
return render_template('login.html')
@app.route('/menu/')
def menu():
user = session.get('user', None)
passwd = session.get('passwd', None)
感谢您的帮助!