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默认配置信息在/ ...
随机推荐
- TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...
- 【轮子狂魔】手把手教你自造Redis Client
为什么做Redis Client? Redis Client顾名思义,redis的客户端,主要是封装了一些对于Redis的操作. 而目前用的比较广泛的 ServiceStack.Redis 不学好,居 ...
- 沧桑巨变中焕发青春活力-记极1s HC5661A 打怪升级之路
最近发现一个新货umaxhosting年付10美元的便宜VPS.2杯喜茶的价格可以让你在国外拥有一个1024MB (1GB) DDR3 RAM.1024MB (1GB) vSwap.70GB RAID ...
- python-GUI之tkinter的学习
最近看了哔哩哔哩的python的学习,直接看代码吧,以后会更新 先来个基础的 import tkinter as tk #导入包 app = tk.Tk() #抽象出一个GUI app.title(& ...
- Selenium笔记:PO模型
所有用到的页面都定义成一个类,继承自基础的Page类 把页面中用到的元素定义成方法 把页面上一些操作定义成方法
- 火狐插件安装-基于web自动化测试
一.Firebug 安装 1. 打开火狐浏览器—选择右上角“打开菜单”(图一)----附件组件(图二) 图一 图二 2. 点击:扩展(图三)—-------用于所有附加组件的工具(图四)----选 ...
- SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换
作者介绍 虫洞社区·签约作者 steven bai 前言 如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情? 目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网 ...
- Spring Data REST PATCH请求远程代码执行漏洞(CVE-2017-8046) 本地复现方法
#1背景 Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务. 恶意的PATCH请求使用精心构造 ...
- JDK动态代理的简单理解
转载:http://www.cnblogs.com/luotaoyeah/p/3778183.html 动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理. ...
- nginx正向vs反向代理
1.概述 nginx的正向代理,只能代理http.tcp等,不能代理https请求.有很多人不是很理解具体什么是nginx的正向代理.什么是反向代理.下面结合自己的使用做的一个简介: 1)正向代理: ...