项目出现的问题:

问题处在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. [C++]linux下实现ls()函数遍历目录

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600794.html 需求:在linux下遍历目录,输出目录中各文件名. 在linux下遍历目录的相关函数有 ...

  2. Python之面向对象-反射

    一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问,检测和修改它本省状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...

  3. 多表查询sql语句

    多表查询sql语句 1 --解锁SCOTT用户 2 alter user scott account unlock 3 --检索指定的列 4 select job,ename,empno from e ...

  4. 【Unity】 Cursor学习

    CursorLockMode.None 光标行为未修改,第一人称视角下鼠标可以突破窗口. CursorLockMode.Locked 光标锁定到游戏窗口的中心,与全屏与否无关,同时隐藏光标(这一点在3 ...

  5. 新手Python第三天(函数)

    Python 函数的创建 def func2(): print('haha') # 函数的返回值 # 函数的返回值,没有定义返回None, # 有一个返回值返回这个object(可以返回一个函数对象) ...

  6. 华为笔试——C++最高分问题

    题目介绍:现在输入一组数据,写入学生的考试分数.已知学生数为N,学生编号为1到N,且0<N<=30000,每个学生都有一个分数:操作数为M且0<M<5000.输入第一行为N M ...

  7. dubbo支持协议及具体对比

    对dubbo的协议的学习,可以知道目前主流RPC通信大概是什么情况,本文参考dubbo官方文档 http://dubbo.io/User+Guide-zh.htm dubbo共支持如下几种通信协议: ...

  8. 插件使用-HighChart

    一.介绍 让数据可视化更简单,兼容 IE6+.完美支持移动端.图表类型丰富.方便快捷的 HTML5 交互性图表库. 官网(英):https://www.highcharts.com/download ...

  9. 使用python快速搭建web服务器

    命令:python -m SimpleHTTPServer 8088 参考:https://www.cnblogs.com/harry-xiaojun/p/6739003.html https://w ...

  10. 场景调研 persona

    1.姓名:王涛 2.年龄:22 3.收入:基本无收入 4.代表用户在市场上的比例和重要性:王涛为铁道学生.本软件的用户主要是学生和老师,尤其是广大的铁大学子,所以此典型用户的重要性不言而喻,而且比例相 ...