20180711-flask高级编程-循环引用

16、 路径加了<>,就会被识别为一个参数,而不是固定的url字符串

  16.1 编程原则:视图函数里面要尽可能间接,函数要见名知意,不能将细节全部写到视图函数里面,那样是强迫让所有看代码的人都来看细节,不对

# -*- coding=utf-8 -*-

from flask import Flask, make_response

from helper import is_isbn_or_key

app = Flask(__name__)
app.config.from_object(‘config‘)

@app.route(‘/book/search/<q>/<page>‘)
def hello(q, page):
isbn_or_key = is_isbn_or_key(q)
pass

if __name__ == ‘__main__‘:
app.run(host=‘0.0.0.0‘, debug=app.config[‘DEBUG‘], port=5000)

fisher.py

# -*- coding=utf-8 -*-

def is_isbn_or_key(word):
isbn_or_key = ‘key‘
if len(word) == 13 and word.isdigit():
isbn_or_key = ‘isbn‘
short_word = word.replace(‘-‘, ‘‘)
if ‘-‘ in q and len(short_word) == 10 and short_word.isdigit():
isbn_or_key = ‘isbn‘
return isbn_or_key

helper.py

  16.2 简化代码,if else

# -*- coding=utf-8 -*-

import requests

class HTTP:
def get(self, url, return_json=True):
r = requests.get(url)
if r.status_code != 200:
return {} if return_json else ‘‘
return r.json() if return_json else r.text

httper.py

  16.3 get方法传进来self,但是函数中没有用到

# -*- coding=utf-8 -*-

import requests

class HTTP:
@staticmethod
def get(url, return_json=True):
r = requests.get(url)
if r.status_code != 200:
return {} if return_json else ‘‘
return r.json() if return_json else r.text

httper.py

  16.4 staticmethod与classmethod

    都表示静态,classmethod是类的方法,如果没有用到类里面的相关变量,没有必要用到classmethod

  16.5 clss HTTP与class HTTP(object)

    python3中写不写object没有区别;python2中有区别

  16.6 alt+enter键,自动导入类

# -*- coding=utf-8 -*-
import json

from flask import Flask

from helper import is_isbn_or_key
from yushu_book import YuShuBook

app = Flask(__name__)
app.config.from_object(‘config‘)

@app.route(‘/book/search/<q>/<page>‘)
def hello(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 json.dumps(result), 200, {‘content-type‘: ‘application/json‘}

if __name__ == ‘__main__‘:
app.run(host=‘0.0.0.0‘, debug=app.config[‘DEBUG‘], port=5000)

fisher.py

# -*- coding=utf-8 -*-

from http import HTTP

class YuShuBook:
isbn_url = ‘http://t.yushu.im/v2/book/isbn/{}‘
keyword_url = ‘http://t.yushu.im/v2/book/search?q={}&count={}&start={}‘

@classmethod
def search_by_isbn(cls, isbn):
url = cls.isbn_url.format(isbn)
result = HTTP.get(url)
return result

@classmethod
def search_by_keyword(cls, keyword, count=15, start=0):
url = cls.isbn_url.format(keyword, count, start)
result = HTTP.get(url)
return result

yushu_book.py

# -*- coding=utf-8 -*-

def is_isbn_or_key(word):
isbn_or_key = ‘key‘
if len(word) == 13 and word.isdigit():
isbn_or_key = ‘isbn‘
short_word = word.replace(‘-‘, ‘‘)
if ‘-‘ in q and len(short_word) == 10 and short_word.isdigit():
isbn_or_key = ‘isbn‘
return isbn_or_key

helper.py

# -*- coding=utf-8 -*-

import requests

class HTTP:
@staticmethod
def get(url, return_json=True):
r = requests.get(url)
if r.status_code != 200:
return {} if return_json else ‘‘
return r.json() if return_json else r.text

httper.py

# -*- coding=utf-8 -*-

DEBUG = True

config.py

  16.7 return jsonify(result)相当于return json.dumps(result), 200, {‘content-type‘: ‘application/json‘}

# -*- coding=utf-8 -*-
import json

from flask import Flask, jsonify

from helper import is_isbn_or_key
from yushu_book import YuShuBook

app = Flask(__name__)
app.config.from_object(‘config‘)

@app.route(‘/book/search/<q>/<page>‘)
def hello(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)

if __name__ == ‘__main__‘:
app.run(host=‘0.0.0.0‘, debug=app.config[‘DEBUG‘], port=5000)

fisher.py

  16.8 循环引用

    fisher.py from app.web import book

    book.py from fisher import app

    fisher模块执行两次,原因,第一次作为入口主文件被执行;第二次作为导入模块被执行

    book执行一次,原因,python中模块只会被导入一次

原文地址:https://www.cnblogs.com/wangmingtao/p/9295972.html

时间: 2024-10-27 07:53:55

20180711-flask高级编程-循环引用的相关文章

Python Flask高级编程

第1章 课程导语介绍课程的内容1-1 开宗明义1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们来学习唯一URL原则.重定向.响应对象Response.2-1 鱼书是一个什么样的产品2-2 准备工作2-3 使用官方推荐的pipenv创建虚拟环境(很好用哦~)2-4 开发工具推荐2-5 设置开发工具的默认解释器2-6 flask最小原型与唯一URL原则2-7 路由的另一种注册方法2-8 app.run

flask高级编程-LocalStack线程隔离

30.LocalStack作为线程隔离对象的意义 30.1 数据结构 限制了某些能力 30.2 线程隔离 # -*- coding=utf-8 -*- import threading import time from werkzeug.local import LocalStack my_stack = LocalStack() my_stack.push(1) print('in main thread after push, value is:' + str(my_stack.top))

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

视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2.书籍搜索(价值辅助功能): 3.选择自己想要的书籍,向他人索要书箱(价值辅助功能). ———————————————————————————————————————————————————————————— 视频02: 一.开始flask项目的步骤: 1.安装python环境: 2.检验python

python flask高级编程视频教程

课程目录部分截图: 下载地址:百度网盘下载 原文地址:https://www.cnblogs.com/stephae/p/10171715.html

《Objective-C 高级编程》干货三部曲(一):引用计数篇

总结了Effective Objective-C之后,还想读一本进阶的iOS书,毫不犹豫选中了<Objective-C 高级编程>: 这本书有三个章节,我针对每一章节进行总结并加上适当的扩展分享给大家.可以从下面这张图来看一下这三篇的整体结构: 注意,这个结构并不和书中的结构一致,而是以书中的结构为参考,稍作了调整. 本篇是第一篇:引用计数,简单说两句: Objective-C通过 retainCount 的机制来决定对象是否需要释放. 每次runloop迭代结束后,都会检查对象的 retai

编程的有效方法--避免循环引用

1.引起循环引用的原因 1> A拥有B,B拥有C.当C需要销毁时,发现被B拥有,当B需要销毁时,发现被A用有,从而导致内存泄漏.如NSTimer(NSRunloop拥有NSTimer,NSTimer拥有self): 2> A拥有B,B拥有A.如block作为属性时,使用代理时: 2.打破循环引用 打破循环引用的关键在于解除上述的拥有关系: 3.出现循环引用的三种情况 NSTimer 定时器跟Runloop协同工作,Runloop是拥有NSTimer的,同时NSTimer是拥有self的,这就导

OC高级编程——深入block,如何捕获变量,如何存储在堆上

首先先看几道block相关的题目 这是一篇比较长的博文,前部分是block的测试题目,中间是block的语法.特性,block讲解block内部实现和block存储位置,请读者耐心阅读.具备block基础的同学,直接调转到block的实现 下面列出了五道题,看看能否答对两三个.主要涉及block栈上.还是堆上.怎么捕获变量.答案在博文最后一行 //-----------第一道题:-------------- void exampleA() { char a = 'A'; ^{ printf("%

Python3 面向对象 高级编程

正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.  class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 还可以尝试给实例绑定一个方法: >>> def set_age(self, age): # 定义一个函数作为实例方法 ...

iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

本章内容 ●    iOS应用中的网络错误源 ●    检测网络的可达性 ●    错误处理的经验法则 ●    处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基于一切正常这个假设.本章将会放弃这个假设,并深入探究网络的真实世界.在真实世界中,事情是会出错的,有时可能是非常严重的错误:手机进入与离开网络.包丢掉或是延迟:网络基础设施出错:偶尔用户还会出错.如果一切正常,那么编写iOS应用就会简单不少,不过遗憾的是现实并非如此.本章将会探讨导致网络操作失败的几