flask高级编程-蓝图和数据库
17、蓝图
17.1 注册蓝图
web = Blueprint('web', __name__)
(1)第一个参数为name
(2)第二个指定蓝图所在包或者模块,通常使用python内置变量__name__来代表蓝图所在的模块
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from flask import Flask def create_app(): app = Flask(__name__) app.config.from_object('config') register_blueprint(app) return app def register_blueprint(app): from app.web.book import web app.register_blueprint(web)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from flask import jsonify, Blueprint from helper import is_isbn_or_key from yushu_book import YuShuBook web = Blueprint('web', __name__) @web.route('/book/search/<q>/<page>') def search(q, page): isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from app import create_app app = create_app() if __name__ == '__main__': app.run(host='0.0.0.0', debug=app.config['DEBUG'], port=5000)
17.2 蓝图引用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from flask import Blueprint web = Blueprint('web', __name__) from app.web import book, user
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from flask import jsonify, request from . import web from helper import is_isbn_or_key from yushu_book import YuShuBook @web.route('/book/search') def search(): q = request.args['q'] page = request.args['page'] isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result)
17.3 wtforms参数验证
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from wtforms import Form, IntegerField, StringField from wtforms.validators import Length, NumberRange class SearchForm(Form): q = StringField(validators=[Length(min=1, max=30)], default='9787501524044') page = IntegerField(validators=[NumberRange(min=1, max=99)], default=1)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from flask import jsonify, request from app.forms.book import SearchForm from helper import is_isbn_or_key from yushu_book import YuShuBook from . import web @web.route('/book/search') def search(): form = SearchForm(request.args) if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result) else: return jsonify({'msg': '参数校验失败'})
访问http://127.0.0.1:5000/book/search?q=9787501524044,有json串返回
17.4 目录
fisher/app/secure.py
# 数据库、密码、账号、flask的app key之类的机密信息,Debug这样开发和生产环境不同的设置
fisher/app/setting.py
# 不涉及到机密信息,生产环境和开发环境一样的配置
18、mysql基础
18.1 列出数据库
show databases;
18.2 选择数据库
use mysql;
18.3 列出表
show tables;
18.4 创建数据库
create database fisher;
18.5 mac安装
brew install mysql
18.6 远程连接
mysql -h 172.16.10.24 -P 3306 -u root -p123456;
18.7 查看表字段
show create table bool;
19、通过封装werkzeug来实现路由
20、连数据库
![](https://images2018.cnblogs.com/blog/1426593/201807/1426593-20180714110221342-152198905.png)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from sqlalchemy import Column, Integer, String from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Book(db.Model): id = Column(Integer, primary_key=True, autoincrement=True) title = Column(String(50), nullable=False) author = Column(String(30), default='未名') binding = Column(String(20)) # 装帧的版本,精装或者平装 publisher = Column(String(50)) # 出版社 price = Column(String(20)) pages = Column(Integer) # 页数 pubdate = Column(String(20)) # 出版年月 isbn = Column(String(15), nullable=False, unique=True) summary = Column(String(1000)) # 书籍简介 image = Column(String(50)) # 图书的图片 def sample(self): pass
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# -*- coding=utf-8 -*- from flask import Flask from app.models.book import db from app.web.book import web def create_app(): app = Flask(__name__) app.config.from_object('app.secure') app.config.from_object('app.setting') register_blueprint(app) db.init_app(app) db.create_all(app=app) return app def register_blueprint(app): app.register_blueprint(web)