视频06:

1、自动导包快捷键——默认为alt + enter 键组合          选中的字符由小写变为大写——Ctrl + Shift + U键组合

2、DataRequired()——防止用户只传入一个空格

3、使用组合验证器的方式来完成校验。

  从中学习构建代码的思想:把独立的功能拆开,写到不同的函数或不同的对象中去,使用时则可任意去组合这些函数和对象,来实现我们要的功能。

  1. from wtforms import Form,StringField,IntegerField
  2. from wtforms.validators import Length, NumberRange, DataRequired
  3.  
  4. class SearchForm(Form):
  5. q = StringField(validators=[DataRequired(), Length(min=1,max=30)])#内置的验证器,validators提供的是一个数组
  6. page = IntegerField(validators=[NumberRange(min=1,max=99)],default=1)

4、定义一个类变量,并在本类的方法中使用它(当前不推荐,如下代码仅为说明类变量的定义及使用)

  1. class YuShuBook:
  2. per_page = 15 #定义一个类变量来存储,正确的做法是把它写到配置文件中去,因为可能需要更改每页的记录数
  3.  
  4. @classmethod
  5. def search_by_keyword(cls,self,keyword,page=1):
  6. url = cls.keyword_url.format(keyword,cls.per_page,(page-1)*cls.per_page)
  7. result = HTTP.get(url)
  8. return result

5、要获取配置文件中的配置信息,要先导入current_app

  1. from flask import current_app
  1. from flask import current_app # 要获取配置文件中的配置信息,因不能直接使用flask核心对象,所以要先导入current_app
  2.  
  3. class YuShuBook:
  4.  
  5. @classmethod
  6. def search_by_keyword(cls,self,keyword,page=1):
  7. url = cls.keyword_url.format(keyword,cls.current_app.config['PER_PAGE'], cls.calculate_start(page))
  8. result = HTTP.get(url)
  9. return result
  10.  
  11. @staticmethod
  12. def calculate_start(page):
  13. # 把如下语句单独定义成一个函数,是一个好的习惯,提高代码可读性
  14. return (page - 1) * current_app.config['PER_PAGE']

6、拆分配置文件

把配置文件分成两个,secure.py 和 setting

secure中存放——涉及安全性的配置信息

setting中存放——不涉及安全性的配置信息,生产环境和开发环境中配置相同的信息也放这里

————————————————————————————————————————————————————————————

视频07:

1、控制HTTP请求的数量

把数据在本地数据库中缓存起来。这样查询时,首先从本地数据库查,以减少请求数量。

2、在Navicat for MySQL中,手动新建一个mysql数据库

字符集选:utf8mb4 -- UTF-8 Unicode  即最后一个选择

排序规则:utf8mb4_general_ci             即第一个选项

3、数据表创建的三种方式:

Database first  Model first  Code first  (推荐) 

————————————————————————————————————————————————————————————

视频08:

1、模型层   MVC中的M层 (models);

2、安装Flask-SQLAlchemy :   pipenv install Flask-SQLAlchemy  或在pycharm的settings中安装;

3、使 sqlalchemy 创建模型类:

  1. from sqlalchemy import Column, Integer, String
  2.  
  3. # 通过模型在数据库中自动生成数据表,使用sqlalchemy,它并不是flask所特有,是一个第三方包
  4. # Flask_SQLAlchemy对sqlalchemy进行了封闭,提供了更加人性化的api来操作sqlalchemy
  5.  
  6. class Book():
  7. id = Column(Integer, primary_key=True, autoincrement=True)
  8. title = Column(String(50), nullable=False)
  9. _author = Column('author', String(30), default='未名')
  10. pages = Column(Integer)
  11. isbn = Column(String(15), nullable=False, unique=True) #指定isbn在表中不能重复,映射为数据表时会为此列加一列索引
  12. image = Column(String(50))
  13.  
  14. def sample(self):
  15. pass

————————————————————————————————————————————————————————————

视频09:

1、把数据模型映射到数据库中去,首先需要实例化一个SQLAlchemy对象。

  1. from flask_sqlalchemy import SQLAlchemy
  2.  
  3. db = SQLAlchemy()
  4.  
  5. class Book(db.Model):
  6. id = Column(Integer, primary_key=True, autoincrement=True)

2、SQLAlchemy和Flask核心对象的关联,代码在app\__init__.py中书写,所以有flask插件都是这样进行关联的

  1. from flask import Flask
  2. from app.web.book import web# 1.导入蓝图模块web
  3. from app.models.book import db
  4.  
  5. def create_app():
  6. app = Flask(__name__)
  7. app.config.from_object('app.secure')
  8. app.config.from_object('app.setting')
  9. # 3.在app中调用蓝图注册函数
  10. register_blueprint(app)
  11.  
  12. db.init_app(app)
       db.create_all() #把所有模型映射到数据库中去
  13. return app
  14.  
  15. # 2.把蓝图注册表flask核心对象中
  16. def register_blueprint(app):
  17. app.register_blueprint(web)# 注册蓝图

3、配置数据库连接,代码在app\secure.py中书写,SQLAlchemy是支持多数据连接,当前仅连接一个数据库

  1. SQLALCHEMY_DATABASE_URI = 'mysql+cymysql://root:ddh123@localhost:3306/fisher'

因为是用cymysql进行连接,所以要先安装cymysql : pipenv install cymysql

  1.  

学习python-20191230(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数的更多相关文章

  1. 学习python-20191208(1)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频01: 略...... ———————————————————————————————————————————————————————————— 视频02: 搜索需要外部数据源,也就是需要外部的A ...

  2. 学习python-20191217(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数

    视频01: flask框架:最上层是app,它就像一个插线板一样,比如可以插入蓝图,还可以插入其他各种flask插件. 每个蓝图又可以插入很多视图函数,并可指定静态文件夹和模板文件夹. 好的代码结构, ...

  3. 学习python-20191208(2)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频06: 定义静态方法的两种方式: 1.在方法上方加上装饰@staticmethod 2.在方法上方加上装饰@classmethod  方法中要加参数cls  如:def search_by_isb ...

  4. 学习python-20191203-Python Flask高级编程开发鱼书_第02章 Flask的基本原理与核心知识

    视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2. ...

  5. Python Flask高级编程

    第1章 课程导语介绍课程的内容1-1 开宗明义 试看1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们 ...

  6. 《Python编程从入门到实践》_第六章_字典

    一个简单的字典 #用户信息 user = {','city':'shanghai'} print(user['name']) print(user['age']) print(user['city'] ...

  7. 《Python编程从入门到实践》第二章_变量和简单数据类型

    什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...

  8. 程序思想中的冒泡法在python和1200PLC中scl高级编程中的应用

    冒泡排序:是计算机科学领域里面的一种算法. header 这个算法名字的由来是因为在执行算法的时候越小的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧 ...

  9. flask 高级编程 上下文与栈(转)

    转: https://www.cnblogs.com/wangmingtao/p/9372611.html 22.上下文与出入栈 22.1 请求过程 请求过来,flask会实例化一个Request C ...

随机推荐

  1. ZOJ 3757 Alice and Bod 模拟

    上次的ZJU月赛题,规则比较复杂,当时就连题意都没摸清楚,只觉得非常复杂 比完后敲啊敲啊敲,连续WA啊,该反思下自己,没按照题意来设置条件,题目中说了 白球入袋并且... 给对手加分 ,白球未入袋并且 ...

  2. 干货 | 利用京东云Web应用防火墙实现Web入侵防护

    摘要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 准备环境 在京东云上准备Web ...

  3. scrapy练习1

    1.建立项目: #建立名为tuto的项目 scrapy startproject tuto 2.进入项目目录: cd tuto 3.建立域名任务: #minyan任务名:后面是任务对应的域名 scra ...

  4. 1)warning LNK4233

    名称 test.exe 包含非 ASCII 字符,在具有除 936 以外的 ANSI 代码页的系统上可能不能加载 DLL 名称 练习动态库.dll 包含非 ASCII 字符,如果系统没有与用于链接此 ...

  5. mysql自关联和多表连接查询

    自关联操作         多表连接查询  inner  join 内查询   left  join  左查询   right  join  右查询                          ...

  6. hash简单题(hdu4907)

    Task schedule 地址:http://acm.hdu.edu.cn/showproblem.php?pid=4907 Problem Description 有一台机器,并且给你这台机器的工 ...

  7. SQL 2005 带自增列 带外键约束 数据导入导出

    1,生成建表脚本 选中要导的表,点右键-编写表脚本为-create到  ,生成建表脚本 2,建表(在新库),但不建外键关系 不要选中生成外键的那部分代码,只选择建表的代码 3,导数据,用SQL STU ...

  8. h5-提升移动端的响应区域

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 分糖果(BFS)

    题目描述 童年的我们,将和朋友分享美好的事物作为自己的快乐.这天,C小朋友得到了糖果,将要把这些糖果分给要好的朋友们.已知糖果从一个人传给另一个人需要1秒的时间,同一个小朋友不会重复接受糖果.由于糖果 ...

  10. 浅谈对RabbitMQ的认识

    一.什么是消息队列?什么时候使用它? 在传统的web架构中(此处特指Java SSM架构),用户在web中进行了某项需要和后台产生交互的操作后,一般都要开启一个session,从view层开始,由co ...