学习python-20191230(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数
视频06:
1、自动导包快捷键——默认为alt + enter 键组合 选中的字符由小写变为大写——Ctrl + Shift + U键组合
2、DataRequired()——防止用户只传入一个空格
3、使用组合验证器的方式来完成校验。
从中学习构建代码的思想:把独立的功能拆开,写到不同的函数或不同的对象中去,使用时则可任意去组合这些函数和对象,来实现我们要的功能。
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)])#内置的验证器,validators提供的是一个数组
page = IntegerField(validators=[NumberRange(min=1,max=99)],default=1)
4、定义一个类变量,并在本类的方法中使用它(当前不推荐,如下代码仅为说明类变量的定义及使用)
class YuShuBook:
per_page = 15 #定义一个类变量来存储,正确的做法是把它写到配置文件中去,因为可能需要更改每页的记录数 @classmethod
def search_by_keyword(cls,self,keyword,page=1):
url = cls.keyword_url.format(keyword,cls.per_page,(page-1)*cls.per_page)
result = HTTP.get(url)
return result
5、要获取配置文件中的配置信息,要先导入current_app
from flask import current_app
from flask import current_app # 要获取配置文件中的配置信息,因不能直接使用flask核心对象,所以要先导入current_app class YuShuBook: @classmethod
def search_by_keyword(cls,self,keyword,page=1):
url = cls.keyword_url.format(keyword,cls.current_app.config['PER_PAGE'], cls.calculate_start(page))
result = HTTP.get(url)
return result @staticmethod
def calculate_start(page):
# 把如下语句单独定义成一个函数,是一个好的习惯,提高代码可读性
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 创建模型类:
from sqlalchemy import Column, Integer, String # 通过模型在数据库中自动生成数据表,使用sqlalchemy,它并不是flask所特有,是一个第三方包
# Flask_SQLAlchemy对sqlalchemy进行了封闭,提供了更加人性化的api来操作sqlalchemy class Book():
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
_author = Column('author', String(30), default='未名')
pages = Column(Integer)
isbn = Column(String(15), nullable=False, unique=True) #指定isbn在表中不能重复,映射为数据表时会为此列加一列索引
image = Column(String(50)) def sample(self):
pass
————————————————————————————————————————————————————————————
视频09:
1、把数据模型映射到数据库中去,首先需要实例化一个SQLAlchemy对象。
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Book(db.Model):
id = Column(Integer, primary_key=True, autoincrement=True)
2、SQLAlchemy和Flask核心对象的关联,代码在app\__init__.py中书写,所以有flask插件都是这样进行关联的
from flask import Flask
from app.web.book import web# 1.导入蓝图模块web
from app.models.book import db def create_app():
app = Flask(__name__)
app.config.from_object('app.secure')
app.config.from_object('app.setting')
# 3.在app中调用蓝图注册函数
register_blueprint(app) db.init_app(app)
db.create_all() #把所有模型映射到数据库中去
return app # 2.把蓝图注册表flask核心对象中
def register_blueprint(app):
app.register_blueprint(web)# 注册蓝图
3、配置数据库连接,代码在app\secure.py中书写,SQLAlchemy是支持多数据连接,当前仅连接一个数据库
SQLALCHEMY_DATABASE_URI = 'mysql+cymysql://root:ddh123@localhost:3306/fisher'
因为是用cymysql进行连接,所以要先安装cymysql : pipenv install cymysql
最新文章
- 查找素数Eratosthenes筛法的mpi程序
- postfix启动失败
- Render OpenCascade Geometry Surfaces in OpenSceneGraph
- POJ 2406 Power Strings (KMP)
- (转载整理)SAP ERP常用T-CODE
- 解决键盘上符号打出来的和标着的不一样的错误&;不能用ctrl+space切换输入法错误
- uva 1642 Magical GCD
- KnockoutJS(1)-数据模型
- js url编码函数
- 【企业级框架整合】Springmvc+mybatis+restful+bootstrap框架整合
- java线程池01-ThreadPoolExecutor构造方法参数的使用规则
- minimun depth of binary tree
- Python集成开发环境
- [Swift]LeetCode209. 长度最小的子数组 | Minimum Size Subarray Sum
- Egret--添加一个精灵事件
- Delphi使用两种不同方法获取系统端口信息--(装载)
- 问题 C: Frosh Week(2018组队训练赛第十五场)(签到)
- MySQL备份恢复工具Xtrabackup
- Linux set unset命令
- HOJ-2662Pieces Assignment(状态压缩,动态规划)
热门文章
- ZOJ 1454 dp
- Centos7下yum安装软件报错解决办法
- SQL基础教程(第2版)第4章 数据更新:4-2 数据的删除(DELETE)
- Qt在vs2010下的配置
- Springboot JpaRepository findOne() 方法报错
- java类的实例化顺序
- POJ 2976 Dropping tests【0/1分数规划模板】
- PPT制作不加班的十个小窍门
- idea使用Maven创建的JavaWeb项目新建文件时没有打包到target目录报错
- 01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】