项目出现的问题:

问题处在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. 学习java常见dos命令

    在java基础学习阶段时一般会在dos命令行下操作文件,这里列出一些常用命令. 打开DOS控制台的方式 按win+r 再输入 cmd 然后回车. 常用DOS命令 d: 回车 盘符切换 (盘符加冒号) ...

  2. Python学习之路:MINST实战第一版

    1.项目介绍: 搭建浅层神经网络完成MNIST数字图像的识别. 2.详细步骤: (1)将二维图像转成一维,MNIST图像大小为28*28,转成一维就是784. (2)定义好神经网络的相关参数: # M ...

  3. c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助     本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...

  4. 在Visual Studio中使用.lib和.dll的环境搭建

    1 静态库和动态链接库的区别 动态链接库是在运行的时候被调用的,静态库在链接的时候被链接到最终生成的应用程序(.exe)中 静态库需要用到的文件 (.lib .h) 头文件(.h)提供接口,库文件(. ...

  5. php快速上手总结

    PHP作为现代热门主流的开发语言,对于那些想加入新手PHPer,从哪学起,如何学习?你必须要需要掌握PHP的基础知识,基础知识相当于重点,是不可忽视的知识.常用的功能模块,面向对象的,MVC等相关技能 ...

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

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

  7. mutt命令详解

    基础命令学习目录首页 linux命令——mutt的安装和使用[转] 首先介绍一下mutt这个软件,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在l ...

  8. Django_用户权限管理rbac

    组成部分 1.初始化权限:login视图initial_permission,把权限信息放入session.initial_permission函数生成权限列表.菜单列表 2.中间件验证权限:在第一次 ...

  9. iOS 静态库生成(引用第三方SDK、开源库、资源包)

    一.静态库创建 打开Xcode, 选择File ----> New ---> Project  选择iOS ----> Framework & Library ---> ...

  10. react + antiDesign开发中遇到的问题记录

    react + antiDesign开发中遇到的问题记录 一:页面中子路由失效: antiDesign的官方实例中,会把路由重复的地方给去重,而且路由匹配模式不是严格模式.所以我们需要在util.js ...