视频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':'参数校验失败!'})

学习python-20191217(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数的更多相关文章

  1. 学习python-20191208(1)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频01: 略...... ———————————————————————————————————————————————————————————— 视频02: 搜索需要外部数据源,也就是需要外部的A ...

  2. 学习python-20191208(2)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频06: 定义静态方法的两种方式: 1.在方法上方加上装饰@staticmethod 2.在方法上方加上装饰@classmethod  方法中要加参数cls  如:def search_by_isb ...

  3. 学习python-20191203-Python Flask高级编程开发鱼书_第02章 Flask的基本原理与核心知识

    视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2. ...

  4. 学习python-20191230(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数

    视频06: 1.自动导包快捷键——默认为alt + enter 键组合          选中的字符由小写变为大写——Ctrl + Shift + U键组合 2.DataRequired()——防止用 ...

  5. Python Flask高级编程

    第1章 课程导语介绍课程的内容1-1 开宗明义 试看1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们 ...

  6. 《Python编程从入门到实践》_第六章_字典

    一个简单的字典 #用户信息 user = {','city':'shanghai'} print(user['name']) print(user['age']) print(user['city'] ...

  7. 《Python编程从入门到实践》第二章_变量和简单数据类型

    什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...

  8. 程序思想中的冒泡法在python和1200PLC中scl高级编程中的应用

    冒泡排序:是计算机科学领域里面的一种算法. header 这个算法名字的由来是因为在执行算法的时候越小的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧 ...

  9. flask 高级编程 上下文与栈(转)

    转: https://www.cnblogs.com/wangmingtao/p/9372611.html 22.上下文与出入栈 22.1 请求过程 请求过来,flask会实例化一个Request C ...

随机推荐

  1. Spark核心算子

    Spark RDD: Transformation Meaning map(func) 返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func处理形成的. filter(func) ...

  2. Python—数据结构——链表

    数据结构——链表 一.简介 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构.由一系列节点组成的元素集合.每个节点包含两部分,数据域item和指向下一个节 ...

  3. Python—程序设计:单例模式

    单例模式 单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建对象的最佳方式.这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,并提供一种访问其 ...

  4. axios 等待同步请求用法及多请求并发

    axios等待同步请求 直接上代码 首先在函数中返回一个Promise对象,在调用函数使用同步函数,调用目标函数使用await等待即可 参考http://www.cnblogs.com/cckui/p ...

  5. php 设计模式之命令模式

    命令模式 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化.对请求排队或记录请求日志,以及支持撤销的操作. 命令模式以松散耦合主题为基础,发送消息.命令和请求,或通过一组处理程序发送 ...

  6. HDU-3038 How Many Answers Are Wrong(带权并查集区间合并)

    http://acm.hdu.edu.cn/showproblem.php?pid=3038 大致题意: 有一个区间[0,n],然后会给出你m个区间和,每次给出a,b,v,表示区间[a,b]的区间和为 ...

  7. python thrift demo

    简介Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python, PHP, Ruby, Erlang, Perl, Hask ...

  8. softmax推导以及多分类的应用

  9. protobuf编译工具使用

    1.下载,配置环境变量 下载地址:https://github.com/google/protobuf/releases,选择protoc-xxx-win64.zip下载 把.exe文件的位置加入到P ...

  10. 年近30的Java程序员为了达到月入三万的目标,都做了哪些准备?

    1.我觉得像我这般年纪的(29岁),有相对扎实技术功底的(就不自谦了),对赚钱有着强烈欲望的程序员,应该定一个切实的小目标——五年内月入三万! 之所以要定这个目标,最主要的原因是老婆的批评刺痛了我—— ...