首页 > 其他分享 >05-蓝图(Blueprints)

05-蓝图(Blueprints)

时间:2024-10-10 11:10:52浏览次数:9  
标签:Blueprints isbn 05 url app 蓝图 key return

Flask 的蓝图(Blueprints)是一种组织代码的机制,允许你将 Flask 应用分解成多个模块。这样可以更好地组织应用逻辑,使得应用更具可维护性和可扩展性。

每个蓝图可以有自己的路由、视图函数、模板和静态文件,这样可以将相关的功能分组。

通过使用蓝图,你可以将 Flask 应用拆分成多个模块,每个模块处理相关的功能,使得代码更加清晰和易于管理。

  • 创建蓝图:在独立的模块中定义蓝图,并指定路由和视图函数。
  • 注册蓝图:在主应用中注册蓝图,并设置路由前缀。

  • 使用蓝图中的模板和静态文件:将模板和静态文件放在蓝图的 templates 和 static 文件夹中。

  • 使用请求钩子和错误处理:在蓝图中定义请求钩子和错误处理函数。

 

单文件Flask应用 fisher.py

from flask import Flask, make_response, jsonify
from httpTest import HTTP

# 实例化flask对象
app = Flask(__name__)

# 关键字搜索:http://t.talelin.com/v2/book/search?q={}&start={}&count={}
# isbn搜索: http://t.talelin.com/v2/book/isbn/{isbn}
@app.route('/book/search/<q>')
def search(q):
    """
    :param q: 普通关键字 isbn
    :param page: 分页
    :return:
    """
    # 调用is_isbn_or_key方法,判断q是关键字还是isbn
    isbn_or_key = is_isbn_or_key(q)

    isbn_url = "http://t.talelin.com/v2/book/isbn/{}"
    key_url = "http://t.talelin.com/v2/book/search?q={}&start={}&count={}"

    # 根据isbn_or_key的值,获取相应的url
    if isbn_or_key == "isbn":
        url = isbn_url.format(q)
        result = HTTP.get(url)
    else:
        url = key_url.format(q, 1, 5)
        result = HTTP.get(url)

    return jsonify(result), 200

def is_isbn_or_key(q):
    # 默认q为关键字
    isbn_or_key = "key"

    # 判断q是否为isbn
    # isbn13 是由13位0到9数字组成的字符串
    # isbn10 是由10位0到9数字组成,含有一些 "-"
    if q.isdigit() and len(q) == 13:
        isbn_or_key = "isbn"

    short_q = q.replace("-", "")
    if q.isdigit() and len(short_q) == 10 and q in "-":
        isbn_or_key = "isbn"

    return isbn_or_key


if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True, port=5000)

 

使用蓝图将Flask应用进行分解

项目结构

配置文件 config.py

# 配置参数
DEBUG = True

入口文件 fisher2.py

from flask import Flask, make_response, jsonify
from datetime import datetime

from app import create_app

# 创建flask对象
app = create_app()


if __name__ == '__main__':

    app.run(host= '0.0.0.0', debug=app.config['DEBUG'], port=5000)

1) 创建蓝图,并指定路由和视图函数 book.py

# 蓝图 blueprint 蓝本

from flask import jsonify, Blueprint
from httpTest import HTTP

# 蓝图 blueprint 蓝本
web = Blueprint('web', __name__)

# 关键字搜索:http://t.talelin.com/v2/book/search?q={}&start={}&count={}
# isbn搜索: http://t.talelin.com/v2/book/isbn/{isbn}
# @app.route('/book/search/<q>')
# 通过蓝图注册视图函数
@web.route('/book/search/<q>')
def search(q):
    """
    :param q: 普通关键字 isbn
    :param page: 分页
    :return:
    """
    # 调用is_isbn_or_key方法,判断q是关键字还是isbn
    isbn_or_key = is_isbn_or_key(q)

    isbn_url = "http://t.talelin.com/v2/book/isbn/{}"
    key_url = "http://t.talelin.com/v2/book/search?q={}&start={}&count={}"

    # 根据isbn_or_key的值,获取相应的url
    if isbn_or_key == "isbn":
        url = isbn_url.format(q)
        result = HTTP.get(url)
    else:
        url = key_url.format(q, 1, 5)
        result = HTTP.get(url)

    return jsonify(result), 200

def is_isbn_or_key(q):
    # 默认q为关键字
    isbn_or_key = "key"

    # 判断q是否为isbn
    # isbn13 是由13位0到9数字组成的字符串
    # isbn10 是由10位0到9数字组成,含有一些 "-"
    if q.isdigit() and len(q) == 13:
        isbn_or_key = "isbn"

    short_q = q.replace("-", "")
    if q.isdigit() and len(short_q) == 10 and q in "-":
        isbn_or_key = "isbn"

    return isbn_or_key

视图函数文件 httpTest.py

import requests

class HTTP:
    # 发送GET请求
    @staticmethod
    def get(url, return_json=True):
        response = requests.get(url)
        if response.status_code == 200:
            if return_json:
                return response.json()
            else:
                return response.text
        else:
            print(f"Error: {response.status_code}")
            return None

    # 发送POST请求
    @staticmethod
    def post(url, data, headers={}, return_json=True):
        response = requests.post(url, data=data, headers=headers)
        if response.status_code == 200:
            if return_json:
                return response.json()
            else:
                return response.text
        else:
            print(f"Error: {response.status_code}")
            return None

 

2) 注册蓝图,在初始化中实例化flask对象,并注册蓝图 app/__init__.py

from flask import Flask
from app.web.book import web

def create_app():
    # 实例化flask对象
    app = Flask(__name__)
    # flask对象加载配置文件
    app.config.from_object('config')

    # 调用注册蓝图的方法
    register_blueprint(app)
    return app

def register_blueprint(app):
    # 注册蓝图
    app.register_blueprint(web)

 

标签:Blueprints,isbn,05,url,app,蓝图,key,return
From: https://www.cnblogs.com/REN-Murphy/p/18455938

相关文章

  • AGC005 题解
    目录A-STringB-MinimumSumC-TreeRestoringA-STring用栈模拟一下即可,具体的,当栈顶出现形如ST时,将其弹出。#include<bits/stdc++.h>#definelllonglongusingnamespacestd;llRead(){ intsig=1; llnum=0; charc=getchar(); while(!isdigit(c))......
  • AI预测福彩3D采取888=3策略+和值012路或胆码测试10月9日新模型预测第105弹
            经过100多期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,100多期一共只错了12次,这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了,大部分菜友还是走的正常渠道,因此,得想办法进行缩水,尽可能......
  • 商汤开源大模型压缩工具LLMC!单卡压缩Llama 3.1 405B
    关注公众号:青稞AI,第一时间学习最新AI技术......
  • 【2024-10-05】连岳摘抄
    23:59不是因为你不好而有自卑感。无论看起来多么优秀的人,多少都会感到自卑。只要还有目标,当然就有自卑感。                                                 ——阿尔弗......
  • 2018-11-05
    使用Flexible实现手淘H5页面的终端适配lib-flexible再聊移动端页面的适配如何在Vue项目中使用vw实现移动端适配!(function(t,document){varn=document.documentElement,r=t.devicePixelRatio||1;functioni(){vart=n.clientWidth/10;n.......
  • 2018_11_02_05
    JavaScript事件流定义申明:本文仅限私人学习之用----原文;下图展示了完整的js事件流捕获阶段:Document>ElementHtml>ElementBody==>ElementDiv冒泡阶段:ElementDiv>ElementBody>ElementHtml==>Document分析捕获阶段:document对象首先接收到click事件,然后事件沿DO......
  • XYD1005CSPS
    T1传送门[最短路,二分答案]Description无向连通图,求出一个最小的\(x\),使得每两点之间存在一条路径可以划分成不超过\(k\)段路径,且每段路径长度不超过\(x\),只能从节点处切割,不能从边中间划分。\(n\le100\),无重边自环。Solution\(n\)非常小,又要考虑每两个点,自然想到全......
  • 八大排序--05堆排序
    假设数组arr[]={5,7,4,2,0,3,1,6},请通过插入排序的方式,实现从小到大排列:方法:①利用完全二叉树构建大顶堆;     ②对顶元素和堆底元素进行交换,除堆底元素之外其余元素继续构造大顶堆;     ③重复步骤②,直到所有元素都不参与构建,整个数组排序完成【完全......
  • CSM4064 一款带防反接功能的充电芯片 适用于4054容易烧坏、耐高压成本高的情况
            CSM4064是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其SOT23-5封装与较少的外部元件数量使得CSM4064成为便携式应用的理想选择。        CSM4064可以适合USB电源和适配器电源工作。特点:高达600mA的可编程充电电流无需......
  • ICMP timestamp请求响应漏洞CVE-1999-0524解决方法
    ICMPtimestamp请求响应漏洞CVE-1999-0524解决方法1、添加进和出的规则firewall-cmd--permanent--direct--add-ruleipv4filterINPUT0-pICMP--icmp-typetimestamp-request-mcomment--comment"denyICMPtimestamp"-jDROPfirewall-cmd--permanent--direct--ad......