DAY4-Flask项目
项目出现的问题:
问题处在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项目的更多相关文章
- flask 项目的开发经验总结
已经开发了几个flask项目, 是时候总结一下了, 这里涉及到项目源码的组织, 常用的包, 源码示例. =========================需要的 python 包有:========= ...
- Python框架 Flask 项目实战教程
本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...
- 通过VM虚拟机安装Ubuntu server部署flask项目
1. VM安装Ubuntu server 14.04,系统安装完成后,首先安装pip工具方便之后的包安装,此处需先使用 apt-get install update,apt-get install u ...
- flask项目开发中,遇到http 413错误
在flask项目中,上传文件时后台报http 413 Request Entity Too Large 请求体太大错误! 解决的2种方法: 1.在flask配置中设置 MAX_CONTENT_LENG ...
- flask项目部署到阿里云 ubuntu16.04
title: flask项目部署到阿里云 ubuntu16.04 date: 2018.3.6 项目地址: 我的博客 部署思路参考: Flask Web开发>的个人部署版本,包含学习笔记. 开始 ...
- 部署Flask项目到腾讯云服务器CentOS7
部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...
- pycharm创建Flask项目,jinja自动补全,flask智能提示
pycharm创建Flask项目,jinja自动补全,flask智能提示 之前一直都是用在idea里创建空项目然后导入,之后就没有各种的智能提示,在选择文类,选择模板之类的地方就会很麻烦. 步骤1:用 ...
- flask 项目基本框架的搭建
综合案例:学生成绩管理项目搭建 一 新建项目目录students,并创建虚拟环境 mkvirtualenv students 二 安装开发中使用的依赖模块 pip install flask==0.1 ...
- windows环境隐藏命令行窗口运行Flask项目
Linux下可以使用nohub来使Flask项目在后台运行,而windows环境下没有nohub命令,如何让Flask项目在windows中在后台运行而不显示命令行窗口呢? 1.写一个.bat脚本来启 ...
- nginx + gunicorn + flask项目发布
程序安装(linux mint) gunicorn安装:pip install gunicorn nginx安装:sudo apt-get install nginx 配置 nginx默认配置信息在/ ...
随机推荐
- jQuery插件编写基础之“又见弹窗”
本文将通过一个实例来引出jQuery插件开发中的一些细节,首先介绍下jQuery插件开发的一些基础知识. jQuery的插件开发主要分为两类: 1. 类级别,即在jQuery类本身上扩展方法,类似与 ...
- linux bash Shell脚本经典 Fork炸弹演示及命令详解
Jaromil 在 2002 年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在 shell 中运行后几秒后系统就会宕机: :(){:|:&};: 这样看起来不是很好理 ...
- opengl绘制三角形
顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Element Buffer Object,EBO或Inde ...
- Python 夺大满贯!三大编程语言榜即将全部“失守”!
有互联网创业者说: 2019年可能会是过去十年里最差的一年 但却是未来十年里最好的一年 真的是这样吗? “每月工资1w,如何赚到200w?” 同样一个问题,问不同的人会得到不同的答案. 有一类人,开始 ...
- Scikit-learn数据变换
转载自:https://blog.csdn.net/Dream_angel_Z/article/details/49406573 本文主要是对照scikit-learn的preprocessing章节 ...
- Django中的Project和App的区别
Django是一个非常流行的用python编写的Web框架,在使用Django之前,我们需要了解一些基本的概念,这样可以在使用Django的时候对其有一个更加深入的把握.本文主要介绍Django中两个 ...
- ipcs命令详解
基础命令学习目录首页 多进程间通信常用的技术手段包括共享内存.消息队列.信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程 ...
- nginx keepalived 高可用方案(转)
转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...
- Scrum Meeting 6 -2014.11.12
今天apec最后一天,大部分任务都差不多了,局部测试问题不大.大家修复下小细节就可以开始整合了. Member Today’s task Next task 林豪森 协助测试及服务器部署 协助测试及服 ...
- HTML基础学习总结
一.HTML的一些基本描述 全称:Hyper Text Markup Language 定义:超文本标记语言,是标记语言而不是编程语言,使用标记标签来描述网页,所以也被称为网页 格式:标签对里面放纯文 ...