Python Flask登录(无数据库)
我试图在flask中实现以下视图:Python Flask登录(无数据库),python,rest,flask,Python,Rest,Flask,我试图在flask中实现以下视图: /索引 *显示包含用户名和密码项的表单 *提交后,重定向到2 /params *显示另一个包含更多条目的窗体 *仅当他们提供了1的用户名和密码时才可查看 *提交后,重定向到3 /上传 *使用从1和2输入的字段执行magic() *仅当他们填写1和2时才可见 我看到的每个教程都假设您使用数据库。1中的用户名和密码未根据任何数据库进行检查。它们仅用于ntlm身份验证 这能做到吗?还是我误用了flask?当您提到NTLM身份验证时,我假设您正在Windows网络中
*显示包含用户名和密码项的表单
*提交后,重定向到2
*显示另一个包含更多条目的窗体
*仅当他们提供了1的用户名和密码时才可查看
*提交后,重定向到3
*使用从1和2输入的字段执行magic()
*仅当他们填写1和2时才可见
我看到的每个教程都假设您使用数据库。1中的用户名和密码未根据任何数据库进行检查。它们仅用于ntlm身份验证
这能做到吗?还是我误用了flask?当您提到NTLM身份验证时,我假设您正在Windows网络中运行。如果是这样的话,我不知道你为什么需要一个表单,用户可以输入用户名和密码 NTLM和Kerberos使用Windows会话的主体对同一域中运行的服务的用户进行身份验证。用户只需登录一次Windows,当调用服务时,该身份就会自动神奇地用于验证用户身份
Flask使用模块支持此功能您可以使用会话存储用户名和密码,并使用标志指定用户已完成前两个步骤:
import flask
app = flask.Flask(__name__)
app.secret_key = 'something'
def validate_upload(f):
def wrapper():
if 'completed' not in flask.session or not flask.session['completed']:
return flask.redirect('/')
return f()
return wrapper
@app.route('/', methods = ['GET'])
def home():
html = """
<form action='/second' method = 'POST'>
<input type='text' name='username'>
<input type='password' name='password'>
<input type='submit' value='Submit'>
</form>
"""
return html
@app.route('/second', methods=['POST'])
def second():
username, password = flask.request.form['username'], flask.request.form['password']
flask.session['username'] = username
flask.session['password'] = password
flask.session['completed'] = True
return flask.redirect('/upload')
@app.route('/upload', methods=['GET'])
@validate_upload
def do_something():
return '<p>Doing something with values</p>'
导入烧瓶
app=烧瓶。烧瓶(\uuuuu名称\uuuuuuu)
app.secret_key='something'
def验证_上传(f):
def包装器():
如果“已完成”不在flask.session中或不是flask.session[“已完成”]:
返回烧瓶。重定向(“/”)
返回f()
返回包装器
@app.route('/',方法=['GET'])
def home():
html=”“”
"""
返回html
@app.route('/second',methods=['POST'])
def second():
用户名,密码=flask.request.form['username'],flask.request.form['password']
flask.session['username']=用户名
flask.session['password']=密码
session['completed']=True
返回烧瓶。重定向(“/upload”)
@app.route('/upload',methods=['GET'])
@验证上传
定义做某事():
返回“使用值做某事”
除了@login\u所需的功能外,我已经正确实现了所有功能。似乎无论我做什么,它都无法验证(因此我无法查看页面)