视频01:

  flask框架:最上层是app,它就像一个插线板一样,比如可以插入蓝图,还可以插入其他各种flask插件。

  每个蓝图又可以插入很多视图函数,并可指定静态文件夹和模板文件夹。

  好的代码结构,要有清晰的层级结构。各级初始化工作,放到自己的__ini__.py中进行。

————————————————————————————————————————————————————————————

视频02:

1、在视图函数的py文件中,把视图函数注册到蓝图对象中

 from flask import  Blueprint #1.导入蓝图模块

#2.创建蓝图    蓝图参数说明:(1)、是蓝图的名称;(2)、蓝图所在的包或模块: 通常情况下可以用__name__来代表蓝图所在的模块
web = Blueprint('web',__name__) #3.使用web来注册视图函数
@web.route('/book/search/<q>/<page>')
def search(q,page):
pass

2、app的__ini__.py中,把蓝图注册表flask核心对象中

from flask import Flask
from app.web.book import web# 1.导入蓝图模块web def create_app():
app = Flask(__name__)
app.config.from_object('config')
# 3.在app中调用蓝图注册函数
register_blueprint(app)
return app # 2.把蓝图注册表flask核心对象中
def register_blueprint(app):
app.register_blueprint(web)# 注册蓝图

————————————————————————————————————————————————————————————

视频03:

1、Blueprint的作用:是在大型工程里分拆不同的模块用的,而不是分拆文件用的。

   所以视频02里的做法是不对的,需要调整。即把同一模块的蓝图提取出来,放到模块的初始化文件中去。调整如下:

(1)web\__ini__.py中的代码如下:
from flask import  Blueprint

#蓝图参数说明:1、是蓝图的名称;2、蓝图所在的包或模块: 通常情况下可以用__name__来代表蓝图所在的模块
web = Blueprint('web',__name__)
#导入视图函数分布的模块,未导入的话,视图函数将无法执行。而且如下导入语句一定要放在创建蓝图代码的下方,不然会报错
from app.web import book,user
(2)web\book.py中的代码如下, 视图函数在book文件中:
# 1.导入web模块,因为蓝图是在web模块下的__ini__.py文件中创建
from . import web
# 2.使用web来注册视图函数
@web.route('/book/search/<q>/<page>')
def search(q,page):
pass

————————————————————————————————————————————————————————————

视频04:

本视频学习的几个关键点:

1、视图函数的传参方式之 使用带 ? 的方式传参,用flask自带的request对象来接收参数;

2、用request的args方法得到请求参数:   q = request.args['q']

3、把不可变字典变成可变字典  a = request.args.to_dict()

@web.route('/book/search/')
def search():
# 使用?的传参方式,?q=李明&page=1,函数接收参数不能写成def search(q,page):
# Request对象——(1)HTPP请求的相关信息可以通过Request来获取到;(2)获到查询参数;(3)获到remote ip
# 可以直接从flask中导入request对象 import flask import request
q = request.args['q']
page = request.args['page']
# 通过request.args得到的是不可变字典
# 把不可变字典变成可变字典 to_dict()
# a = request.args.to_dict()

————————————————————————————————————————————————————————————

视频05:

本视频学习的几个关键点:

1、分层,写web应用时分层非常重要;

2、在flask中用第三方的库wtforms对参数进行校验。首先要安装wtforms:    pip install wtforms;

3、新建一个验证层——建议放在app目录下,在其下新建一个名字为forms的文件夹,并在forms下新建py文件,验证代码写在book.py中;

4、 去掉空格,q = form.q.data.strip(),与trim()同理。

app\forms\book.py中的代码如下:

from wtforms import Form,StringField,IntegerField
from wtforms.validators import Length,NumberRange class SearchForm(Form):
q = StringField(validators=[Length(min=1,max=30)])#内置的验证器,validators提供的是一个数组
page = IntegerField(validators=[NumberRange(min=1,max=99)],default=1)

app\web\book.py中的代码如下:

from flask import jsonify,request
from helper import is_isbn_or_key
from yushu_book import YuShuBook
from . import web #1、 导入验证层模块
from app.forms.book import SearchForm @web.route('/book/search/')
def search():
# 2、定义
form = SearchForm(request.args)
if form.validate():# true时,代表验证通过
q = form.q.data.strip()# strip()去掉空格,与trim()同理
page = form.page.data
isbn_or_key = is_isbn_or_key(q)
if isbn_or_key == 'isbn':
result = YuShuBook.search_by_isbn(q) # 导入模块的快捷方式,在YuShuBook上按Alt+Enter,然后选择载入对应模块
else:
result = YuShuBook.search_by_keyword(q)
else:
return jsonify({'msg':'参数校验失败!'})

最新文章

  1. Java虚拟机 - 内存模型
  2. SOLR (全文检索)
  3. (easy)LeetCode 226.Invert Binary Tree
  4. Hdu 4514 湫湫系列故事——设计风景线
  5. Xshell配色方案
  6. Co-prime Array&amp;&amp;Seating On Bus(两道水题)
  7. 【android】WebView缓存数据收集
  8. 高性能mysql(一)
  9. C语言可变参数
  10. 【论文速读】ChengLin_Liu_ICCV2017_Deep_Direct_Regression_for_Multi-Oriented_Scene_Text_Detection
  11. python并发编程之多线程1
  12. Vue 封装的noData组件
  13. Latex 左右引号
  14. POJ3255-Roadblocks(最短路)
  15. 使用Code First建模自引用关系笔记
  16. 制作CentOS fence-agents 镜像
  17. mybatis Dynamic SQL动态 SQL
  18. Java中equals,hashcode
  19. pipenv虚拟环境和依赖管理工具
  20. X-NUCA联赛WEB赛前指导write-up

热门文章

  1. 当切换用户时出现-bash-4.1$
  2. idea 2018.3.4 破解
  3. “杀死”纸质名片!HiHello能重构商业关系网吗?
  4. 20.docker 持久化存储与数据共享
  5. 一文彻底搞懂Cookie、Session、Token到底是什么
  6. 吴裕雄--天生自然 JAVA开发学习:switch case 语句
  7. 12 Spring Data JPA:springDataJpa的运行原理以及基本操作(下)
  8. IntelliJ IDEA 2019.2 LUA环境搭建说明
  9. 第二季 第十一天 part2
  10. Linux中的各种文件类型