项目出现的问题:

问题处在import requests。requests库已经安装了啊;

找了半天也不知道具体错误在哪里,根据提示想是不是http.py这个模块与Python内置的同名模块冲突了?所以把http改了个名字发现没有报错了可以正常启动了

好奇怪。。。。

1.蓝图:插入到核心对象app

添加__init__.py  使文件夹成为一个包

蓝图相关的初始化放在web文件夹中

之前的fisher.py代码:

from flask import Flask

app = Flask(__name__)
app .config.from_object('config') if __name__ == '__main__':
app.run(host='0.0.0.0', debug=app.config['DEBUG'])

把 app = Flask(__name__) app .config.from_object('config')

放进app文件下的__init__.py中来初始化核心的对象:

from flask import Flask

def create_app():
app = Flask(__name__)
app.config.from_object('config') # 导入载入配置文件 参数为模块路径
return app

在Fisher.py 中就可以使用create_app初始化核心对象

使用;蓝图:

1.实例化蓝图对象:在book.py中(也就是实现视图函数注册的地方)中实例化蓝图对象用于注册视图函数

web = Blueprint('web', __name__)

‘web’:蓝图的名称

__name__:指定蓝图所在的包或者模块,__name__ 就是所在的包中

2.使用web蓝图注册视图函数:

@web.route('/book/search/<q>/<page>')

在上述操作后还是不能访问视图函数

我们不能把蓝图当做核心对象使用,蓝图还是要在核心对象中注册。老大还是 app!

3.把蓝图对象插入到 app上:

有关app 的操作都放在了 app 文件夹 中的__init__.py 中:

from flask import Flask

def create_app():
app = Flask(__name__)
app.config.from_object('config') # 导入载入配置文件 参数为模块路径
register_blueprint(app)
return app def register_blueprint(app): #注册蓝图
from app.web.book import web
app.register_blueprint(web) #把蓝图注册到Flask核心对象app

就可以访问api了!(其实有点问题)

访问:http://127.0.0.1:81/book/search/9787111552062 无法访问

http://127.0.0.1:81/book/search/9787111552062/1 才可以!!!

2.同一个蓝图下面把视图函数拆分到不同的文件里面去

web下有很多的视图函数,不可能内个函数都有一个蓝图注册,web下只需要一个蓝图就可以注册多个函数:

web = Blueprint('web', __name__)

剪切到__init__.py文件中

在book.py中导入web:from .import web

但是任然不能访问视图函数,原因是:book.py分开的视图函数是没有被导入执行的

解决方法:在__init__.py中导入book.py执行

from flask import Blueprint

web = Blueprint('web', __name__) #注册蓝图,web蓝图名称,__name__指定蓝图的所在的模块

from app.web import book

3.视图函数传参的方式优化:

使用?的方式传参:

会报错,在 def search(q, page)这种方式就不能用了

Flask提供Request对象。它的实例化可以接收到 ? 后的参数

Request几乎包含了全部的http请求的信息:

request 对象不能自己实例化,而是Flask框架创建管理的,使用他的时候导入就可以了:

获取q 和 page:

4.验证参数(WTForms):

验证层:验证参数单独在一个文件夹中,form-book.py:

from wtforms import Form, StringField, IntegerField
from wtforms.validators import Length, NumberRange class SearchForm(Form):
q = StringField(validators=[Length(min=1, max=30)])#文本类型的变量,StringField对象创建
page = IntegerField(validators=[NumberRange(min=1, max=99)], default=1) #default默认

在视图函数中使用:

@web.route('/book/search/')
def search():
# q = request.args['q']
# page = request.args['page']
form = SearchForm(request.args) #实例化,传入的参数是q和page 直接request.args
if form.validate(): #判断是否通过验证
q = form.q.data #取值q
page = form.page.data
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)
else:
return jsonify({'msg':'参数校验失败'})

DAY4-Flask项目的更多相关文章

  1. flask 项目的开发经验总结

    已经开发了几个flask项目, 是时候总结一下了, 这里涉及到项目源码的组织, 常用的包, 源码示例. =========================需要的 python 包有:========= ...

  2. Python框架 Flask 项目实战教程

    本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...

  3. 通过VM虚拟机安装Ubuntu server部署flask项目

    1. VM安装Ubuntu server 14.04,系统安装完成后,首先安装pip工具方便之后的包安装,此处需先使用 apt-get install update,apt-get install u ...

  4. flask项目开发中,遇到http 413错误

    在flask项目中,上传文件时后台报http 413 Request Entity Too Large 请求体太大错误! 解决的2种方法: 1.在flask配置中设置 MAX_CONTENT_LENG ...

  5. flask项目部署到阿里云 ubuntu16.04

    title: flask项目部署到阿里云 ubuntu16.04 date: 2018.3.6 项目地址: 我的博客 部署思路参考: Flask Web开发>的个人部署版本,包含学习笔记. 开始 ...

  6. 部署Flask项目到腾讯云服务器CentOS7

    部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...

  7. pycharm创建Flask项目,jinja自动补全,flask智能提示

    pycharm创建Flask项目,jinja自动补全,flask智能提示 之前一直都是用在idea里创建空项目然后导入,之后就没有各种的智能提示,在选择文类,选择模板之类的地方就会很麻烦. 步骤1:用 ...

  8. flask 项目基本框架的搭建

    综合案例:学生成绩管理项目搭建 一 新建项目目录students,并创建虚拟环境 mkvirtualenv students 二 安装开发中使用的依赖模块 pip install flask==0.1 ...

  9. windows环境隐藏命令行窗口运行Flask项目

    Linux下可以使用nohub来使Flask项目在后台运行,而windows环境下没有nohub命令,如何让Flask项目在windows中在后台运行而不显示命令行窗口呢? 1.写一个.bat脚本来启 ...

  10. nginx + gunicorn + flask项目发布

    程序安装(linux mint) gunicorn安装:pip install gunicorn nginx安装:sudo apt-get install nginx 配置 nginx默认配置信息在/ ...

随机推荐

  1. STM8S——Clock control(CLK)

    1.主时钟源 有四种时钟源可以用做主时钟: (1)1-24MHz高速外部晶体振荡器(HSE) (2)最大24MHz高速外部时钟信号(HSE user-ext) (3)16MHz高速内部RC振荡器(HS ...

  2. 接口测试之基础篇--http协议

     概念:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种 ...

  3. Spring学习----- Spring配置文件xml文档的schema约束

    1.配置文件示例. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...

  4. 阿里云centos7.4安装并部署svn1.10.0版本(配置多仓库,加入开机自启动)

    如何安装最新版本 1.10.0: 如果已安装旧版本,先卸载 yum remove subversion* 查看当前可安装的版本 yum list | grep subversion 可以去官网下载安装 ...

  5. Java线程wait和sleep的区别

    Java中调用wait方法或者sleep方法都可以让线程进入waitint或者time-waiting状态,但是它们还是 有所不同的: wait是Object中的方法,而sleep则是Thread中的 ...

  6. 011 --Mysql中特定查询

    1.优化COUNT()查询 COUNT()可能是被大家误解最多的函数了,它有两种不同的作用,其一是统计某个列值的数量,其二是统计行数.统计列值时,要求列值是非空的,它不会统计NULL.如果确认括号中的 ...

  7. 论文笔记:分形网络(FractalNet: Ultra-Deep Neural Networks without Residuals)

    FractalNet: Ultra-Deep Neural Networks without Residuals ICLR 2017 Gustav Larsson, Michael Maire, Gr ...

  8. chage命令详解

    基础命令学习目录首页 原文链接:https://www.jb51.net/article/78693.htm linux chage命令简介: chage命令用于密码实效管理,该是用来修改帐号和密码的 ...

  9. Java实验五(客户端)

    一.    实验内容 1.    运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.    利用加解密代码包,编译运行代码,客户端加密,服务器解密: 3.    客户端加密明文后将密文通过 ...

  10. YQCB冲刺周第五天

    站立会议: 任务看板: 今天的任务为依旧为将用户记录的数据添加到数据库中,以及金额球的设置. 遇到的问题为金额球在jsp页面的显示.