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

本系列教程深入讲解Python Flask高级编程,涵盖蓝图的使用、视图函数注册、参数传递及校验。通过示例展示了如何在不同模块间组织代码,以及利用wtforms进行参数验证。
摘要由CSDN通过智能技术生成

视频01:

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

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

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

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

视频02:

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

from flask importBlueprint #1.导入蓝图模块#2.创建蓝图蓝图参数说明:(1)、是蓝图的名称;(2)、蓝图所在的包或模块: 通常情况下可以用__name__来代表蓝图所在的模块

web = Blueprint('web',__name__)#3.使用web来注册视图函数

@web.route('/book/search//')defsearch(q,page):pass

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

from flask importFlaskfrom app.web.book import web#1.导入蓝图模块web

defcreate_app():

app= Flask(__name__)

app.config.from_object('config')#3.在app中调用蓝图注册函数

register_blueprint(app)returnapp#2.把蓝图注册表flask核心对象中

defregister_blueprint(app):

app.register_blueprint(web)#注册蓝图

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

视频03:

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

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

(1)web\__ini__.py中的代码如下:

from flask importBlueprint#蓝图参数说明:1、是蓝图的名称;2、蓝图所在的包或模块: 通常情况下可以用__name__来代表蓝图所在的模块

web = Blueprint('web',__name__)

#导入视图函数分布的模块,未导入的话,视图函数将无法执行。而且如下导入语句一定要放在创建蓝图代码的下方,不然会报错

from app.web import book,user

(2)web\book.py中的代码如下, 视图函数在book文件中:

#1.导入web模块,因为蓝图是在web模块下的__ini__.py文件中创建

from . importweb#2.使用web来注册视图函数

@web.route('/book/search//')defsearch(q,page):pass

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

视频04:

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

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

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

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

@web.route('/book/search/')defsearch():#使用?的传参方式,?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 importForm,StringField,IntegerFieldfrom wtforms.validators importLength,NumberRangeclassSearchForm(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 importjsonify,requestfrom helper importis_isbn_or_keyfrom yushu_book importYuShuBookfrom . importweb#1、 导入验证层模块

from app.forms.book importSearchForm

@web.route('/book/search/')defsearch():#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':'参数校验失败!'})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值