【发布时间】:2020-05-03 12:27:08
【问题描述】:
我远不是该主题的专家,我的问题甚至可能毫无意义,但我正在尝试制作一个从我制作的服务器收集数据的应用程序。我编写了一个 Python 脚本,可以登录网站并从中抓取数据。当您向 API 发出 GET 请求时,将调用 Python 函数并将数据放在服务器上供应用程序获取。问题是:每当用户发出 GET 请求(甚至是 POST 请求,以发送 Python 脚本登录所需的凭据)时,服务器都会为每个用户更改。例如,如果用户发布了他的凭据,则字典“凭据”会为每个人更改,如果第二个用户同时发布他的凭据,则字典可能会为两个用户之一获取错误的值。代码如下:
from flask import Flask, request, jsonify
import backend as b
app = Flask(__name__)
credentials = dict()
subjectNames = ['Italiano', 'Inglese', 'Filosofia', 'Storia', 'Matematica', 'Informatica', 'Fisica', 'Scienze', 'Arte', 'Educazione Fisica']
@app.route('/login', methods=['POST'])
def getCredentials():
if request.method == 'POST':
username = request.get_json(force=True).get('username')
password = request.get_json(force=True).get('password')
credentials['username'] = username
credentials['password'] = password
return jsonify({'credentials': credentials})
@app.route ('/creds', methods=['GET'])
def creds():
return jsonify({'credentials': credentials})
@app.route('/api', methods=['GET'])
def api():
if request.method == 'GET':
query = str(request.args['query'])
if query == 'marks':
d = {}
m = b.getFullMarks(b.login(credentials['username'], credentials['password']))
for i in range(len(subjectNames)):
d[subjectNames[i]] = m[i]
return jsonify(d)
elif query == 'names':
d = {}
m = b.getNames(b.login(credentials['username'], credentials['password']))
for i in range(len(subjectNames)):
d[subjectNames[i]] = m[i]
return jsonify(d)
elif query == 'calendar':
d = {}
m = b.calendar(b.login(credentials['username'], credentials['password']))
d['Calendar'] = m
return jsonify(d)
elif query == 'badge':
d = {}
m = b.badge(b.login(credentials['username'], credentials['password']))
d['Badge'] = m
return jsonify(d)
if __name__ == '__main__':
app.run()
【问题讨论】:
-
全局
credentials = dict()对于webapps来说是个大问题。你想使用flask-login 或类似的来处理这个
标签: python json api flask request