flask高级编程-蓝图和数据库

17、蓝图
  17.1 注册蓝图
    web = Blueprint('web', __name__)
    (1)第一个参数为name
    (2)第二个指定蓝图所在包或者模块,通常使用python内置变量__name__来代表蓝图所在的模块
 
# -*- 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)
fisher/app/__init__.py
 
# -*- 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)
fisher/app/web/book.py

 

# -*- 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)
fisher/fisher.py

 

  17.2 蓝图引用

 

# -*- coding=utf-8 -*-
from flask import Blueprint
 
web = Blueprint('web', __name__)
 
from app.web import book, user
fisher/app/web/__init__.py

 

# -*- 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)
fisher/app/web/book.py

 

  17.3 wtforms参数验证
 
# -*- 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)
fisher/app/forms/book.py

 

# -*- 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': '参数校验失败'})
fisher/app/web/book.py

 

     访问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、连数据库
 
# -*- 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
fisher/app/models/book.py

 

# -*- 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)
fisher/app/__init__.py

 

posted @ 2018-07-12 16:09  SunTao_1024  阅读(1022)  评论(0编辑  收藏  举报