赞
踩
参考博文链接:https://blog.csdn.net/linshuhe1/article/details/51742474
前端开源框架 Bootstrap, 使用Bootstrap可以去创建简洁、美观的页面。
在前面,我们已经使用了 Python + Flask 去创建一个简单的线性回归模型预测 web,使用html模板进行页面展示。在这里,为了更好的展示,引入了一个简化在 Flask 项目中集成前端开源框架 Bootstrap 的Flask扩展 ,一个插件 flask-bootstrap 。
安装这个插件库: flask-bootstrap:
pip install flask-bootstrap
在python脚本中导入 Bootstrap 库,创建一个 Bootstrap 实例:
from flask_bootstrap import Bootstrap
app = Flask(__name__)
bootstrap = Bootstrap(app)
if __name__ == '__main__':
app.run()
在该python文件 *.py 同级别下的 templates 文件目录下创建一个 前端模板文件 html 文件,名为 base.html ,建议名称就写为 base.html。
base.html:
{% extends "bootstrap/base.html" %} {% block title %}Flask{% endblock %} {% block navbar %} <div class="navbar navbar-inverse" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/">Flasky</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="/">Home</a></li> </ul> </div> </div> </div> {% endblock %} {% block content %} <div class="container"> {% block page_content %}{% endblock %} </div> {% endblock %}
我们使用这个 base.html 作为一个基础模板,一个骨架。对于其它的前端模板,可以直接继承这个 base.html的 页面渲染效果, 相当于base.html 集成了一个前端页面, 然后其他的页面继承它, 在这个基础上 进行修改 重载 重写 就可以完成新的页面, 可以加快页面的编写, 尤其对于我这种不熟悉前端框架的疼来讲。 便于开发
其中的标签的意义:
创建一个页面 html, 用于真正显示的页面的内容, 在代码中 直接去继承这个 base.html 基础模板即可。创建的文件名字为:test_bootstrap.html:
{% extends "base.html" %}
{% block title %}linearRegression{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Hello, {{ name }}!</h1>
</div>
{% endblock %}
后端的代码:
from flask_bootstrap import Bootstrap
from flask import Flask, render_template
app = Flask(__name__)
bootstrap = Bootstrap(app)
@app.route('/bootstrap/<name>')
def flask_bootstrap_test(name):
return render_template('test_bootstrap.html',name = name)
if __name__ == '__main__':
app.run()
运行代码进行测试:http://127.0.0.1:5000/bootstrap/alzn
结果如下所示:
可以发现,这个 Flasky 和 Home 导航栏 , 集成了 Bootstrap 框架的插件 flask-bootstrap
后端的代码:
# -*- coding: utf-8 -*- from flask_bootstrap import Bootstrap from flask import Flask, render_template, request, redirect, url_for, jsonify from werkzeug.utils import secure_filename import os import time app = Flask(__name__) bootstrap = Bootstrap(app) @app.route('/bootstrap/<name>') def flask_bootstrap_test(name): return render_template('test_bootstrap.html',name = name) UPLOAD_FOLDER = 'upload' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER # 设置文件上传的目标文件夹 basedir = os.path.abspath(os.path.dirname(__file__)) # 获取当前项目的绝对路径 ALLOWED_EXTENSIONS = set(['txt', 'png', 'xlsx']) # 允许上传的文件后缀 # 判断文件是否合法 def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS # 具有上传功能的页面 @app.route('/') def upload_test(): return render_template('api_upload_bootstrap.html') @app.route('/api/upload', methods=['POST'], strict_slashes=False) def api_upload(): print("有开始执行吗?") file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER']) # 拼接成合法文件夹地址 if not os.path.exists(file_dir): os.makedirs(file_dir) # 文件夹不存在就创建 f = request.files['myfile'] # 从表单的file字段获取文件,myfile为该表单的name值 if f and allowed_file(f.filename): # 判断是否是允许上传的文件类型 fname = f.filename ext = fname.rsplit('.', 1)[1] # 获取文件后缀 f.save(os.path.join(file_dir, fname)) # 保存文件到upload目录 #return jsonify({"errno": 0, "errmsg": "上传成功"}) return render_template('api_upload_bootstrap.html') else: return jsonify({"errno": 1001, "errmsg": "upload fail"}) if __name__ == '__main__': app.run()
对于用户自己定义的页面: api_upload_bootstrap.html :
{% extends "base.html" %} {% block title %}DSCAnalysisWeb{% endblock %} {% block page_content %} <h1>文件上传示例</h1> <!-- <form action="/api/upload" enctype='multipart/form-data' method='POST'>--> <!-- <input type="file" name="file">--> <!-- <input type="submit" value="上传">--> <!-- </form>--> <form id="form1" method="post" action="/api/upload" enctype="multipart/form-data"> <div> <input id="File1" type="file" name="myfile"/> <!--后台代码中获取文件是通过form的name来标识的--> <input type="submit">上传</input> </div> {% endblock %} <!-- <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>文件上传示例</h1> <!-- <form action="/api/upload" enctype='multipart/form-data' method='POST'>--> <!-- <input type="file" name="file">--> <!-- <input type="submit" value="上传">--> <!-- </form>--> <form id="form1" method="post" action="/api/upload" enctype="multipart/form-data"> <div> <input id="File1" type="file" name="myfile"/> <!--后台代码中获取文件是通过form的name来标识的--> <input type="submit">上传</input> </div> </body> </html> --!
运行测试界面:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。