内容简介:项目结构
项目结构
├── static #静态资源 ├── templates ├── fisher.py
首先先构建搜索关键字的视图函数
from flask import Flask app = Flask(__name__) @app.route('/book/search/<q>/<page>') def search(q,page): """ q:代表普通关键字 或 isbn isbn : isbn10:由10位数字组成,其中可能包含'-' isbn13:由13位数字组成 key: """ key_or_isbn = 'key' if len(q) == 13 and q.isdigit(): key_or_isbn = 'isbn' short_q = q.replace('-', '') if len(q) == 10 and len(short_q) and short_q.isdigit(): key_or_isbn = 'isbn' return key_or_isbn @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
项目结构
├── static #静态资源 ├── templates ├── fisher.py ├── helper.py
然后把判断逻辑抽取出来,放到一个新文件里。
#helper.py def is_isbn_or_key(word): """ q:代表普通关键字 或 isbn isbn : isbn10:由10位数字组成,其中可能包含'-' isbn13:由13位数字组成 key: """ key_or_isbn = 'key' if len(word) == 13 and word.isdigit(): key_or_isbn = 'isbn' short_word = word.replace('-', '') if len(word) == 10 and len(short_word) and short_word.isdigit(): key_or_isbn = 'isbn' return key_or_isbn
在主函数里导入 hellper.py
,调用方法返回判断结果
项目结构
├── static #静态资源 ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py
HTTP请求
创建一个 HttpRequest.py
# HttpRequest.py import requests class HTTP: def get(self,url,return_json=True): req = requests.get(url) if return_json: return req.json() else: return req.text
这样显然不够健壮,应该加入判断,如果请求返回 404
的时候的处理方法
# HttpRequest.py import requests class HTTP: def get(self,url,return_json=True): req = requests.get(url) if req.status_code == 200: if return_json: return req.json() else: return req.text else : if return_json: return {} else: return ''
这样之后确实是逻辑上达到了要求,但是比较冗长,还可以简短一些,并且我们并没有用到 self
,所以可以使用 @staticemthod
装饰成静态方法
# HttpRequest.py import requests class HTTP: @staticmethod def get(url,return_json=True): req = requests.get(url) if req.status_code != 200: return {} if return_json else '' return req.json() if return_json else req.text
从API中获取数据
├── static #静态资源 ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py ├── YuShu_Book.py
#YuShu_Book.py from HttpRequest import HTTP class YuShuBook: isbn_url = 'http://t.yushu.im/v2/book/isbn/{}' keyword_url = 'http://t.yushu.im/v2/book/search?q={}&start={}&count={}' @classmethod def search_by_isbn(cls,isbn): url = cls.isbn_url.format(isbn) result = HTTP.get(url) #接收一个json数据 return result @classmethod def search_by_keyword(cls,keyword): url = cls.keyword_url.format(keyword,start=15,count=0) result = HTTP.get(url) return result
重构app.py
from flask import Flask,jsonify from yushu_book import YuShuBook from helper import is_isbn_or_key app = Flask(__name__) @app.route('/book/search/<q>/<page>') def search(q,page): isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result) # 因为Respone只允许接收字符串,元组,Response对象,使用jsonify 可以把dict处理成flask.wrappers.Response,就可以成为相应体 @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
将识图函数拆分到单独文件中
用 BulePrint
将拆分的文件注册到 app
上,达到拆分的效果
重构了很多东西,所以把每个包里的东西都会列出来
├── app │ ├── web │ │ ├── __init_.py │ │ └── book.py │ └── __init__.py ├── static ├── templates ├── fisher.py ├── helper.py ├── HttpRequest.py ├── YuShu_Book.py
首先把和书有关的视图函数抽出来,注册一个 web
蓝图到 app
上
# web/book.py from flask import jsonify from flask import Blueprint from helper import is_isbn_or_key from yushu_book import YuShuBook web = Blueprint('web',__name__) @web.route('/book/search/<q>/<page>') def search(q,page): isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q) return jsonify(result)
然后,将 app
对象初始化重构,把实例化 flask
对象,放到 __init__
里,
然后将蓝本注册到 app
上,并且把实例化的 app
对象返回
# app/__init__.py from flask import Flask def create_app(): app = Flask(__name__) register_blueprint(app) return app def register_blueprint(app): from app.web.book import web app.register_blueprint(web)
主函数里调用运行 app
#fisher.py from app import create_app app = create_app() @app.route('/') def hello_world(): return 'Hello fisher!' if __name__ == '__main__': app.run()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 「Flask实战」鱼书项目实战三
- 「Flask实战」鱼书项目实战四
- 「Flask实战」鱼书项目实战六
- 「Flask实战」flask鱼书项目实战二
- go语言实战教程:Redis实战项目应用
- Runtime项目实战
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
微机原理与接口技术
李文英、李勤、刘星、宋蕴新 / 清华大学出版社 / 2001-9 / 26.00元
《高等院校计算机应用技术规划教材•应用型教材系列•微机原理与接口技术》是“高职高专计算机系列教材”之一。全书包括微机原理、汇编语言、接口技术三部分内容。微机原理部分讲述了80x86的内部结构及工作原理、半导体存储器及其系统、微型机总线结构等。汇编语言部分讲述了指令系统、编程技巧。接口技术部分讲述了中断系统、中断控制器、并行接口、串行接口、DMA控制器、定时器,以及A/D、D/A转换器等常用芯片的硬......一起来看看 《微机原理与接口技术》 这本书的介绍吧!