DAY5-Flask项目
1.验证参数(WTForms):
当URL为/book/search?q= &page=1 时 ,p=空格,验证器会通过,在forms验证层的book.py文件中添加DataRequired验证器,防止用户只传送空格
from wtforms import Form, StringField, IntegerField
from wtforms.validators import Length, NumberRange, DataRequired class SearchForm(Form):
q = StringField(validators=[DataRequired(), Length(min=1, max=30)])#文本类型的变量,StringField对象创建
page = IntegerField(validators=[NumberRange(min=1, max=99)], default=1) #default默认
2.拆分配置文件:
修改config.py:
secure.py:#此文件包含数据库密码账号等机密数据,生产环境相关的配置,此文件不应该上传到git
setting.py:#此文件保存生产环境和开发环境配置一样的配置参数和一些不机密 的参数
yushu_book.py修改代码:by_keyworld搜索方式,传入的参数通过类的方法(编程思想:理由以后的修改)calculate_start 来添加
3.限制API访问数量(数据库初接触-Code First):
Code First:用代码来建立数据库!
业务逻辑应该写在MVC模型中的M(模型层)中!
调整文件结构:把自定义的模块放在libs文件下,把yushu_book.py放到spider文件夹中(以后作用会类似于爬虫)
模型层 MVC,新建models
使用Flask的第三方插件sqlalchemy来创建数据库:
from sqlalchemy import Column, Integer, String class Book():
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
author = Column('author', String(30), default='未名')
binding = Column(String(20)) #精装还是瓶装
publisher = Column(String(50)) #出版社
price = Column(String(20))
pages = Column(Integer)
pubdate = Column(String(20)) #出版日期
isbn = Column(String(15), nullable=False, unique=True) #unique设为不重复
summary = Column(String(1000))
image = Column(String(50)) def sample(self):
pass
将模型对象book.py映射到数据库中要借助sqlalchemy实例化的对象:
from flask_sqlalchemy import SQLAlchemy
要把 SQLAlchemy对象插入到app核心对象中!!!!:
在secure.py中指明数据库的连接(属于机密信息)
先要安装连接数据库的驱动(cymysql),先安装cymysql驱动:pipenv install cymysql
ORM:对象关系映射
4.Flask上下文:
Flask:核心对象
AppContext(应用上下文):核心对象的封装,附加了一些额外的参数
Request:保存了请求信息
RequestContext(请求上下文):Request的封装,附加了一些参数
编码时要使用核心对象和请求对象时,要从AppContext和RequestContext间接的使用!!!
LocStack():本地代理
current_app返回的是核心对象app 不是应用上下文AppContext
同样的request返回的也不是RequestContext(请求上下文),而是Request
_find_app()方法:返回的是app
_request_ctx_stack:RequestContext的实例化对象
_app_ctx_stack:应用级别的Flask实例化对象
Request push进栈之前,Flask首先会先检查_app_ctx_stack的栈顶是否为空,如果为空或者不是当前对象,那么Flask会把AppContext推入到栈中,然后再将Reques推进栈
current_app和request始终指向栈顶,在使用current_app和request时实际上是在简介操作栈顶元素(实际上是上下文)。在栈顶是空的时候,使用urrent_app和request就会出现错误!
所以要使用得到app对象,要确保应用上下文AppContext在栈中,
得到应用上下文对象方法:ctx = app.app_context()
推入栈中:ctx.push()
当一个请求进入时,上下文会进栈,请求结束时在两个栈中就会被弹出栈
弹出方法:pop(),所以:
在项目中的的这段代码:
没有push和pop的操作,是因为在请求中应用current_app时Flask自动推入栈
5.上下文的with语句:
进栈简洁方法使用with语句替换push()和pop():
什么时候使用with语句:
DAY5-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默认配置信息在/ ...
随机推荐
- Jsp中格式化时间戳的常用标签
接下来一段时间的记录,虽然不是一些什么全新的知识,但是作为后台开发人员都是应该必须掌握的前端基础技能,说实话,每一个后台程序员的短板就在于前端技能的弱而造就了不能更上一层楼.从今天开始,我将彻底开启菜 ...
- mybatis学习(一)-------XML 映射配置文件详解
XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配 ...
- React——event
1.绑定在React元素上的事件与绑定在DOM元素上的事件非常相似,但是也有一个不同的地方 React事件使用驼峰命名法命名 //在HTML中 <button onclick='handle() ...
- Codewars笔记
说明:以下内容均来自codewars网站,列举的试题我都做过且通过,并以此记录来学习python. 1,需求:将大小写互相转换,非字母的字符保留 我的代码: def to_alternating_ ...
- UnityShader学习笔记1 — — 入门知识整理
注:资料整理自<Unity Shader入门精要>一书 一.渲染流程概念阶段: 应用阶段:(1)准备好场景数据:(如摄像机位置,物体以及光源等) (2)粗粒度剔除(Culling): ...
- 木马分析出现python语言,360的安全人员不禁感叹还有这种操作?
几年前,敲诈者木马还是一个默默无闻的木马种类.然而,由于其极强的破坏力和直接且丰厚的财富回报,敲诈者木马这几年已经一跃成为曝光率最高的木马类型——甚至超越了盗号木马.远控木马.网购木马这传统三强.与此 ...
- C#如何在各类控件中输入\输出数据
文本框:TextBox Text - 按钮文字 TextBox.text=""; s=TextBox.text; 单选按钮+复选按钮 RadioButton,CheckBox Te ...
- Netty源码分析第3章(客户端接入流程)---->第2节: 处理接入事件之handle的创建
Netty源码分析第三章: 客户端接入流程 第二节: 处理接入事件之handle的创建 上一小节我们剖析完成了与channel绑定的ChannelConfig初始化相关的流程, 这一小节继续剖析客户端 ...
- 如何解决zabbix snmp异常超时、不稳定、时通时断:Timeout
针对平时工作中,zabbix snmp出现异常超时.不稳定.时通时断:Timeout while connecting 等的情况,以下我将以使用乐维监控为例,进行解决方案的详细叙述. 一.问题:设 ...
- Gaussian Models
Warming Up Before we talk about multivariate Gaussian, let's first review univariate Gaussian, which ...