Я запускаю код на Python (я обнаружил, что он уже построен из учебника). Я хочу развернуть модель в веб-приложении (используя Flask)
Когда я запускаю свое приложение, я получаю следующую ошибку, см. Трассировку ниже:
jinja2.exceptions.UndefinedError: 'csrf_token' не определено
Трассировка:
File "/anaconda3/envs/tensorflow/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/anaconda3/envs/tensorflow/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "/Users/usersname/Desktop/flaskSaaS-master/app/templates/uploaded.html", line 1, in top-level template code
{% extends "layout.html" %}
File "/Users/usersname/Desktop/flaskSaaS-master/app/templates/layout.html", line 94, in top-level template code
{% block content %}{% endblock %}
File "/Users/usersname/Desktop/flaskSaaS-master/app/templates/uploaded.html", line 8, in block "content"
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
jinja2.exceptions.UndefinedError: 'csrf_token' is undefined
127.0.0.1 - - [06/Oct/2019 19:57:32] "GET /upload.php?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -
127.0.0.1 - - [06/Oct/2019 19:57:32] "GET /upload.php?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -
127.0.0.1 - - [06/Oct/2019 19:57:32] "GET /upload.php?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200
-
127.0.0.1 - - [06/Oct/2019 19:57:32] "GET /upload.php?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200
-
127.0.0.1 - - [06/Oct/2019 19:57:32] "GET /upload.php?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200
-
127.0.0.1 - - [06/Oct/2019 19:57:32] "GET /upload.php?__debugger__=yes&cmd=resource&f=ubuntu.ttf HTTP/1.1" 200 -
Я не могу понять, почему страница индекса теперь не загружается.
Вот код для рассматриваемой страницы uploaded.html , уже созданной кем-то другим.
{% extends "layout.html" %}
{% block head %}
{{ super() }}
{% endblock %}
{% block content %}
<!DOCTYPE html>
<html>
<head>
<body>
<img src="http://diagnijmegen.nl/images/b/bd/Xray.jpg" alt="Italian Trulli">
<!-- {{ predictions }} -->
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body>
<h2>Results</h2>
<table>
<tr>
<th>Disease</th>
<th>Percent Likelihood</th>
</tr>
<tr>
<td>Pneumonia</td>
<td>98%</td>
</tr>
<tr>
<td>Fibrosis</td>
<td>43%</td>
</tr>
</table>
</body>
</html>
<title>Index</title>
</head>
<body>
</body>
</html>
{% endblock %}
И это код для представления ( main.py ):
from flask import render_template, jsonify, Flask, redirect, url_for, request
from app import app
import random
import os
from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np
@app.route('/')
#disease_list = ['Atelectasis', 'Consolidation', 'Infiltration', 'Pneumothorax', 'Edema', 'Emphysema', \
# 'Fibrosis', 'Effusion', 'Pneumonia', 'Pleural_Thickening', 'Cardiomegaly', 'Nodule', 'Mass', \
# 'Hernia']
@app.route('/upload')
def upload_file2():
return render_template('index.html')
@app.route('/uploaded', methods = ['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
path = os.path.join(app.config['UPLOAD_FOLDER'], f.filename)
model= ResNet50(weights='imagenet')
img = image.load_img(path, target_size=(224,224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)
preds_decoded = decode_predictions(preds, top=3)[0]
print(decode_predictions(preds, top=3)[0])
f.save(path)
return render_template('uploaded.html', title='Success', predictions=preds_decoded, user_image=f.filename)
@app.route('/index')
def index():
return render_template('index.html', title='Home')
@app.route('/map')
def map():
return render_template('map.html', title='Map')
@app.route('/map/refresh', methods=['POST'])
def map_refresh():
points = [(random.uniform(48.8434100, 48.8634100),
random.uniform(2.3388000, 2.3588000))
for _ in range(random.randint(2, 9))]
return jsonify({'points': points})
@app.route('/contact')
def contact():
return render_template('contact.html', title='Contact')
Я прочитал учебник несколько раз и понятия не имею, почему он не работает. Очевидно, ошибка в файле uplodaded.html , но я не знаю точно, где я должен изменить код. Если я что-то изменяю или использую в качестве ссылки другие .htmls из других упражнений, я получаю больше (и разных) ошибок.
Я публикую «оригинальный» код, который использовался в учебнике. Они показывают нам, что это работает. Заранее спасибо за помощь.