项目出现的问题:

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

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

好奇怪。。。。

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

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

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

之前的fisher.py代码:

  1. from flask import Flask
  2.  
  3. app = Flask(__name__)
  4. app .config.from_object('config')
  5.  
  6. if __name__ == '__main__':
  7. app.run(host='0.0.0.0', debug=app.config['DEBUG'])

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

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

  1. from flask import Flask
  2.  
  3. def create_app():
  4. app = Flask(__name__)
  5. app.config.from_object('config') # 导入载入配置文件 参数为模块路径
  6. return app

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

使用;蓝图:

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

  1. web = Blueprint('web', __name__)

‘web’:蓝图的名称

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

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

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

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

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

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

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

  1. from flask import Flask
  2.  
  3. def create_app():
  4. app = Flask(__name__)
  5. app.config.from_object('config') # 导入载入配置文件 参数为模块路径
  6. register_blueprint(app)
  7. return app
  8.  
  9. def register_blueprint(app): #注册蓝图
  10. from app.web.book import web
  11. 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下只需要一个蓝图就可以注册多个函数:

  1. web = Blueprint('web', __name__)

剪切到__init__.py文件中

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

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

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

  1. from flask import Blueprint
  2.  
  3. web = Blueprint('web', __name__) #注册蓝图,web蓝图名称,__name__指定蓝图的所在的模块
  4.  
  5. from app.web import book

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

使用?的方式传参:

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

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

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

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

获取q 和 page:

4.验证参数(WTForms):

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

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

在视图函数中使用:

  1. @web.route('/book/search/')
  2. def search():
  3. # q = request.args['q']
  4. # page = request.args['page']
  5. form = SearchForm(request.args) #实例化,传入的参数是q和page 直接request.args
  6. if form.validate(): #判断是否通过验证
  7. q = form.q.data #取值q
  8. page = form.page.data
  9. isbn_or_key = is_isbn_or_key(q)
  10. if isbn_or_key == 'isbn':
  11. result = YuShuBook.search_by_isbn(q)
  12. else:
  13. result = YuShuBook.search_by_keyword(q)
  14. return jsonify(result)
  15. else:
  16. 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. jQuery插件编写基础之“又见弹窗”

    本文将通过一个实例来引出jQuery插件开发中的一些细节,首先介绍下jQuery插件开发的一些基础知识. jQuery的插件开发主要分为两类: 1. 类级别,即在jQuery类本身上扩展方法,类似与 ...

  2. linux bash Shell脚本经典 Fork炸弹演示及命令详解

    Jaromil 在 2002 年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在 shell 中运行后几秒后系统就会宕机: :(){:|:&};: 这样看起来不是很好理 ...

  3. opengl绘制三角形

    顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Element Buffer Object,EBO或Inde ...

  4. Python 夺大满贯!三大编程语言榜即将全部“失守”!

    有互联网创业者说: 2019年可能会是过去十年里最差的一年 但却是未来十年里最好的一年 真的是这样吗? “每月工资1w,如何赚到200w?” 同样一个问题,问不同的人会得到不同的答案. 有一类人,开始 ...

  5. Scikit-learn数据变换

    转载自:https://blog.csdn.net/Dream_angel_Z/article/details/49406573 本文主要是对照scikit-learn的preprocessing章节 ...

  6. Django中的Project和App的区别

    Django是一个非常流行的用python编写的Web框架,在使用Django之前,我们需要了解一些基本的概念,这样可以在使用Django的时候对其有一个更加深入的把握.本文主要介绍Django中两个 ...

  7. ipcs命令详解

    基础命令学习目录首页 多进程间通信常用的技术手段包括共享内存.消息队列.信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程 ...

  8. nginx keepalived 高可用方案(转)

    转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...

  9. Scrum Meeting 6 -2014.11.12

    今天apec最后一天,大部分任务都差不多了,局部测试问题不大.大家修复下小细节就可以开始整合了. Member Today’s task Next task 林豪森 协助测试及服务器部署 协助测试及服 ...

  10. HTML基础学习总结

    一.HTML的一些基本描述 全称:Hyper Text Markup Language 定义:超文本标记语言,是标记语言而不是编程语言,使用标记标签来描述网页,所以也被称为网页 格式:标签对里面放纯文 ...