问题复现
核心代码
from flask import Blueprint, request, render_template
from flask_restful import Resource, Api
user_bp = Blueprint('user', __name__, url_prefix='/v1')
api = Api(user_bp)
class LoginView(Resource):
def get(self):
return render_template('login1.html')
api.add_resource(LoginView, "/login")
浏览器访问:127.0.0.1:8000/v1/login
使用F12进入开发者模式查看详情,可以看到浏览器显示的响应头响应类型为 application/json,而正常响应头响应类型应该为 text/html。
问题原因与解决
原因: 因为 flask restful 支持的mediatype仅为application/json,对应的处理函数为 output_json。
如果要输出 html 格式的内容,则需要自己添加处理对应mediatype的函数
解决: 在实例化的api中添加处理html格式的资源配置,重新运行flask项目即可。
from flask import Blueprint, request, render_template
from flask_restful import Resource, Api
user_bp = Blueprint('user', __name__, url_prefix='/v1')
api = Api(user_bp)
@api.representation("text/html")
def out_html(data,code, headers=None):
resp = make_response(data, code)
resp.headers.extend(headers or {})
return resp
class LoginView(Resource):
def get(self):
return render_template('login1.html')
api.add_resource(LoginView, "/login")