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


    视频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)webook.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()同理。

    appformsook.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)

    appwebook.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':'参数校验失败!'})
  • 相关阅读:
    kafka系列教程5(客户端实践)
    log4j示例-Daily方式(log4j.properties)
    Log4j.xml配置(rolling示例)
    Log4j配置详解之log4j.xml
    kafka 常用命令
    linux下进程cpu占用过高问题定位方法
    Linux 操作系统主机名变成bogon怎么解决?
    网络基础 Windows控制台下Ftp使用简介
    网络基础 cookie详解
    网络基础 http 会话(session)详解
  • 原文地址:https://www.cnblogs.com/hzjdpawn/p/12053171.html
Copyright © 2020-2023  润新知