2个应用程序之间的POST请求 - 前端到后端

问题描述 投票:0回答:1

我从我的前端服务移动我的所有蒙戈逻辑,我的后端服务,无论是通过搬运工,撰写运行。我送与更新提交后从表单中检索到的数据后。但是我的MongoDB是不会被更新。

我碰到下面的回溯当我尝试提交表单。

backend_1   | Traceback (most recent call last):
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
backend_1   |     return self.wsgi_app(environ, start_response)
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
backend_1   |     response = self.handle_exception(e)
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
backend_1   |     reraise(exc_type, exc_value, tb)
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
backend_1   |     raise value
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
backend_1   |     response = self.full_dispatch_request()
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
backend_1   |     rv = self.handle_user_exception(e)
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
backend_1   |     reraise(exc_type, exc_value, tb)
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
backend_1   |     raise value
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
backend_1   |     rv = self.dispatch_request()
backend_1   |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
backend_1   |     return self.view_functions[rule.endpoint](**req.view_args)
backend_1   |   File "/app/app.py", line 42, in update_medical_history
backend_1   |     fname = request.form['fname']
backend_1   |   File "/usr/local/lib/python3.6/site-packages/werkzeug/datastructures.py", line 431, in __getitem__
backend_1   |     raise exceptions.BadRequestKeyError(key)

我也有一个斜线问题,我相信我解决了与以下几点:app.url_map.strict_slashes = False

前端:

@app.route('/update_medical_history/<int:id>/', methods=['GET', 'POST'])
def update_medical_history(id):
    patient = invoke_backend(page_name="update_medical_history", id=id)
    form = PatientForm(request.form)
    form.fname.data = patient['fname']
    form.lname.data = patient['lname']
    form.age.data = patient['age']
    form.weight.data = patient['weight']
    if request.method == 'POST' and form.validate():
        backend_url = create_url("update_medical_history", id)

        response = requests.post(backend_url, json=request.form)

        if response.text == "redirect":
            flash('Patient updated', 'success')
            return redirect(url_for('view_patients'))
    return render_template('update_medical_history.html', form=form)

def create_url(page_name, id):
    be_host = os.getenv('BACKEND_SERVICE_HOST', 'backend')
    be_port = os.getenv('BACKEND_SERVICE_PORT', '5000')
    url = 'http://{host}:{port}/{page_name}/{id}'.format(host=be_host, port=be_port, page_name=page_name, id=id)
    return url


def invoke_backend(page_name, id=""):
    url = create_url(page_name, id)
    try:
        res = requests.get(url)
    except Exception:
        return "Error with {}".format(url)
    response = res.json()
    return response

后端:

@app.route('/update_medical_history/<int:id>/', methods=['GET', 'POST'])
def update_medical_history(id):
    patients = mongo.db.patients
    if request.method == 'POST':
        fname = request.form['fname']
        lname = request.form['lname']
        age = request.form['age']
        weight = request.form['weight']

        myquery = {"id": id}
        newvalues = {"$set": {"fname": fname, "lname": lname, "age": age, "weight": weight}}

        patients.update_one(myquery, newvalues)

        return jsonify("redirect")

    patient = patients.find_one({'id': id})
    return jsonify(
        {
            'id': patient['id'],
            'fname': patient['fname'],
            'lname': patient['lname'],
            'age': patient['age'],
            'weight': patient['weight'],
        }
    )
python post flask python-requests
1个回答
0
投票

在休息了一段时间后,我想为什么不直接将表格而不是JSON。这工作。

@app.route('/update_medical_history/<int:id>/', methods=['GET', 'POST'])
def update_medical_history(id):
    patient = invoke_backend(page_name="update_medical_history", id=id)
    form = PatientForm(request.form)
    form.fname.data = patient['fname']
    form.lname.data = patient['lname']
    form.age.data = patient['age']
    form.weight.data = patient['weight']
    if request.method == 'POST' and form.validate():

        backend_url = create_url("update_medical_history", id)

        response = requests.post(backend_url, data=request.form)

        if response.text == "redirect":
            flash('Patient updated', 'success')
            return redirect(url_for('view_patients'))
    return render_template('update_medical_history.html', form=form)

只需添加response = requests.post(backend_url, data=request.form)

© www.soinside.com 2019 - 2024. All rights reserved.