参考资料
笔记资料

文章目录

  • Day1
    • Flask框架简介和快速使用
    • 用户管理系统示例
    • 今日作业
  • Day2
    • Flask配置文件
    • Flask框架之创建路由的两种方式
    • Flask框架之反向生成URL
    • Flask框架之自定义路由转换器
    • Flask框架之app.route参数
    • Flask框架之获取子域名的路由
    • Flask框架之视图中添加装饰器
    • Flask框架之CBV和FBV
    • Flask框架之请求和响应相关
    • Flask框架之模板引擎
    • session使用和源码流程
    • after_request
    • Flask框架之特殊装饰器
    • Flask框架之闪现
    • Flask中间件
    • Flask框架之蓝图
    • 扩展知识
      • pipreqs 项目依赖
      • 函数和方法
  • Day3
    • 课前复习
    • threading.local学习
    • Flask上下文管理之本质分析
    • Flask上下文管理之请求到来处理
    • Flask上下问管理之视图调用阶段
    • Flask中的g到底是什么?生命周期?
    • 补充:面向对象的私有字段
  • Day4
    • 组件的使用和原理
    • 基于pymysql实现用户登录
    • 基于数据库连接池实现用户登录
    • 数据库连接池总结
    • wtforms介绍以及用户登录示例
    • wtforms用户注册示例
    • 今日作业
  • Day5
    • 补充:面向对象metaclass
    • wtforms实例化流程分析
    • 相关面试题
    • ORM框架概念
    • SQLAlchemy框架快速使用
    • SQLAlchemy框架组件介绍
    • SQLAlchemy执行原生SQL
    • SQLAlchemy创建表结构
    • SQLAlchemy实现基本增删查改
    • SQLAlchemy小练习
    • SQLAlchemy常用操作
    • 今日作业
  • Day6
    • wtforms组件验证流程
    • SQLAlchemy操作补充
    • 今日作业
  • Day7
    • flask-script组件
    • 组件应用
    • 创建session的两种方式
    • flask-migrate组件
    • flask自定义扩展
    • flask多app应用
    • flask信号blinker
    • before_request的区别
    • 今日作业

Day1

Flask框架简介和快速使用

# 谈谈对PythonWeb框架
django —— 大而全 重武器。内部提供ORM Admin Form Session 缓存 信号 CSRF。
flask —— 短小精悍 可扩展强。第三方组件丰富。
tonado —— 短小精悍+异步非阻塞。
其他-微小框架 :web.py bottole.py # WSGI
django —— wsgi
flask —— werkzeug
# flask 查看app.run内部调用werkzeug

用户管理系统示例

# vscode 英文输入状态,输入! tab键盘即可快速生成html文本
# jinja2 框架

# 登录页面中使用session
# 报错
RuntimeError: The session is unavailable because no secret key was set.  Set the secret_key on the application to something unique and secret.
# 解决方案,要在app中加入secret_key
app.secret_key = 'u2jksrls123lisr'

# web调试中找到记录的session

# flask项目保存自动
app.debug = True

# 详细页面传递uid
web页面查看

# 具体代码实现
# app.py
from distutils.log import info
from flask import Flask ,render_template, request,redirect,sessionapp = Flask(__name__)
app.secret_key = 'u2jksrls123lisr'
app.debug = TrueUSER_DICT={'1':{'name':'taohy','age':18},'2':{'name':'admin','age':30},'3':{'name':'dabao','age':8}
}# 登录login页面
@app.route('/login',methods=['GET','POST'])
def login():if request.method == 'GET':return render_template('login.html')# request.args # 获取url中 GET传来的值# request.form # 获取html中 POST传过来的值user = request.form.get('user')pwd = request.form.get('pwd')if user == 'admin' and pwd =='11111':# 用户信息放入sessionsession['user_info']= user# session['pwd_info'] = pwdreturn redirect('/index')else:return render_template('login.html',msg = '用户名或密码错误!')# 后台管理index页面
@app.route('/index')
def index():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# return '欢迎'+user_info+'登录后台管理系统'return render_template('index.html',user_dict = USER_DICT) # 将user_dict传递到html# 退出系统 删除session
@app.route('/logout')
def logout():del session['user_info']return redirect('/login')# 详细信息页面
@app.route('/detail')
def detail():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# 详细页面# 获取url值uid = request.args.get('uid')info = USER_DICT.get(uid)return render_template('detail.html',info = info)  # 将info列表传递给htmlif __name__ == '__main__':app.run()
<!--templates/login.html-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户登录</title>
</head>
<body><h1>登录</h1><form method="post" ><input type="text" name="user" ><input type="password" name ="pwd"><input type="submit"  value="提交" >{{msg}}</form>
</body>
</html>
<!--templates/index.html-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>index页面</title>
</head>
<body><ul><!-- 将python传递过来的user_dict解析 -->{% for k,v in user_dict.items() %}<!-- url传值 --><li>用户:{{v['name']}} <a href="/detail?uid={{k}}">查看详情</a></li>{% endfor %}</ul>
</body>
</html>
<!--templates/detail.html-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>详细信息</title>
</head>
<body><h1>详细信息</h1><!-- 将python后台info列表传递到前台解析出来 --><div>{{info.name}}</div>  <div>{{info.age}}</div>
</html>



今日作业

# Flask装饰器 实现(位置、url起别名(不能重复))
# 类似django中间件的东西:before_request装饰器
# 预习 上下文
from threading import local
functools.wraps
functools.partial
面向对象封装
面向对象中 __setattr__ __getattr__ __delattr__

Day2

# 装饰器
# 带参数的装饰器

# 面向对象
封装:
1. 将同一类方法分为一类:方法封装到类中。
2. 将方法中共同的参数封装到对象中:把共用值封装到对象中。情况a b:


Flask配置文件


Flask框架之创建路由的两种方式

# 一般都用方式一

Flask框架之反向生成URL

Flask框架之自定义路由转换器

Flask框架之app.route参数

Flask框架之获取子域名的路由

Flask框架之视图中添加装饰器

Flask框架之CBV和FBV

常用FBV

Flask框架之请求和响应相关

# 请求相关 request

# 响应相关

Flask框架之模板引擎

# jinja2框架使用
# app.py
from distutils.log import info
from multiprocessing import context
from flask import Flask ,render_template, request,redirect,session,Markupapp = Flask(__name__)
app.secret_key = 'u2jksrls123lisr'
app.debug = TrueUSER_DICT={'1':{'name':'taohy','age':18},'2':{'name':'admin','age':30},'3':{'name':'dabao','age':8}
}# 登录login页面
@app.route('/login',methods=['GET','POST'])
def login():if request.method == 'GET':return render_template('login.html')# request.args # 获取url中 GET传来的值# request.form # 获取html中 POST传过来的值user = request.form.get('user')pwd = request.form.get('pwd')if user == 'admin' and pwd =='11111':# 用户信息放入sessionsession['user_info']= user# session['pwd_info'] = pwdreturn redirect('/index')else:return render_template('login.html',msg = '用户名或密码错误!')# 模板全局函数
@app.template_global()
def g_add(a1,a2):return a1+a2# 自定义函数
def create_input_one(value):# 方法一 html加safe安全显示inputreturn "<input value='%s' />" %valuedef create_input_two(value):# 方法二 py引入markupsafereturn Markup("<input value='%s' />" %value)# 后台管理index页面
@app.route('/index')
def index():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# return '欢迎'+user_info+'登录后台管理系统'stra = "我是一个字符串"lista = [1,2,3,4]# **字典多个值context={'k1':'我是context的k1','k2':['k2_1','k2_2','k3_2'],'k3':{'k3_name':'k3','k3_age':20},'k4':lambda x:x+1, # 传递函数'k5':create_input_one,'k6':create_input_two, # 模板内自定义函数'k7':g_add # 全局模板自定义函数}return render_template('index.html',stra=stra,user_dict = USER_DICT,lista=lista,**context) # 将user_dict传递到html# 退出系统 删除session
@app.route('/logout')
def logout():del session['user_info']return redirect('/login')# 详细信息页面
@app.route('/detail')
def detail():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# 详细页面# 获取url值uid = request.args.get('uid')info = USER_DICT.get(uid)return render_template('detail.html',info = info)  # 将info列表传递给htmlif __name__ == '__main__':app.run()
# index.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>index页面</title>
</head><body><p>jinja2框架</p><p>传递字符串:</p><div>{{stra}}</div><p>传递字典——遍历字典:</p><ul><!-- 将python传递过来的user_dict解析 -->{% for k,v in user_dict.items() %}<!-- url传值 --><li>用户:{{v['name']}} <a href="/detail?uid={{k}}">查看详情</a></li>{% endfor %}</ul><p>传递列表——遍历列表:</p>{% for listaa in lista %}<div>{{listaa}}</div>{% endfor %}<p>传递字典——**多个值:</p><div>{{k1}}</div><div>{{k2[0]}} {{k2[1]}} {{k2[3]}}</div><!--k3.get('dontkonw','dontkonw') 不存在key:dontkonw 默认值给dontkonw--><div>{{k3['k3_name']}} {{k3['k3_age']}} {{k3.get('dontkonw','dontkonw')}} </div><!--k4函数 给参数执行--><div>{{k4(20)}}</div><!--方法一 k5自定义函数 新增input html新增安全显示safe--><div>{{k5(20) |safe}} </div><!--方法二 k6自定义函数 新增input py引入Markup--><div>{{k6(20)}} </div><p>全局模板函数</p><div>{{k7(1,2)}}</div>
</body></html>
# layout 使用


session使用和源码流程



after_request


# login 除了登录页面,其他页面执行之前,都要去判断是否登录

Flask框架之特殊装饰器

# 第一次访问

# 定制404页面

# 模板里用到的

Flask框架之闪现

# 经常用的数据存session,不经常用的存flash


Flask中间件

Flask框架之蓝图

# 常用目录框架
# 目录结构划分

# 某一类url加上前缀

# 某一类url加上before_request或者after_request

# 大型项目蓝图,笔记资料里面,自行下载查看!

扩展知识

pipreqs 项目依赖

# 按照依赖
pip3 install pipreqs
# 生成依赖文件 requirements.txt
pipreqs ./
# 安装依赖文件
pip3 install -r requirements.txt

函数和方法

类里面可以是方法,也可以是函数

Day3

课前复习

threading.local学习

# threading.local
作用:为每个线程开辟一块空间进行数据存储。

# 问题:自己通过字典创建一个类似于threading.local的东西。
函数实现:

类实现:



自定义Local思路
自定义Local对象(基于函数)
自定义Local对象(基于面向对象)

Flask上下文管理之本质分析

Flask上下文管理之请求到来处理

第一阶段

Flask上下问管理之视图调用阶段


Flask中的g到底是什么?生命周期?

# 请求中的全局变量
# 单次执行完就销毁了

补充:面向对象的私有字段

Day4


组件的使用和原理

# session存储方式


# 原生的session的bug解决方法


基于pymysql实现用户登录

基于数据库连接池实现用户登录

# pip install DBUtils


数据库连接池总结

wtforms介绍以及用户登录示例

# pip install wtfroms
# python 做表单验证

wtforms用户注册示例

今日作业

Day5

补充:面向对象metaclass

wtforms实例化流程分析

相关面试题

ORM框架概念

SQLAlchemy框架快速使用

SQLAlchemy框架组件介绍

SQLAlchemy执行原生SQL

SQLAlchemy创建表结构

SQLAlchemy实现基本增删查改

SQLAlchemy小练习

SQLAlchemy常用操作

今日作业

Day6

wtforms组件验证流程

SQLAlchemy操作补充

今日作业

Day7

flask-script组件

组件应用

创建session的两种方式

flask-migrate组件

flask自定义扩展

flask多app应用

flask信号blinker

before_request的区别

今日作业

Flak框架 Flask从入门到精通相关推荐

  1. .net MVC5+EF6+bootstrap搭建框架,从入门到精通(三)——之(Bootstrap Fileinput)多图片上传

    .net MVC5+EF6+bootstrap搭建框架,从入门到精通(三)--之(Bootstrap Fileinput)多图片上传 前言废话 .net mvc 实战多图片上传 前言废话 人生最大的b ...

  2. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做模块管理的 添加.修改.删除 项目准备 我们用的工具是:VS 2013 + SqlSer ...

  3. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...

  4. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来完善我们的登录功能 项目准备 我们用的工具是:VS 2013 + SqlServer 20 ...

  5. SpringBoot从入门到精通教程(三十一)- 爬虫框架集成

    需求背景 SpringBoot用法:爬虫框架集成 业务场景 以抓取"今日头条"新闻举例说明 技术点 1. 集成爬虫框架webmagic(更多了解webmagic,可以去官方地址) ...

  6. Python 什么是flask框架?快速入门

    一.Python flask框架 前言 1.Python 面向对象的高级编程语言,以其语法简单.免费开源.免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析. ...

  7. Spring从入门到精通--(1)Spring框架概述

    Spring从入门到精通–(1)Spring框架概述 作者:进击攻城狮 个人主页:欢迎访问我的主页 首发时间:2022年8月2日星期二 订阅专栏:Spring入门到精通 个人信条:星光不问赶路人,岁月 ...

  8. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

    目录 前言 1. 学习路线 2. 学习方法 前言 这篇文章主要总结我之前所学过的框架以及学习路线 从实打实的零基础到框架再到项目 之后实习工作 也在这篇博客中记录我的学习笔记 以及在笔记中遇到的配置安 ...

  9. Spring入门到精通:第一章 基础入门:1.Spring框架概述

    Spring入门到精通:第一章 基础入门:1.Spring框架概述 前言:为什么要学习Spring框架? 为什么要学习Spring框架呐? (1)使用广泛:现在很多的企业都有Spring的影子,不管是 ...

  10. 【动力节点】springmvc框架入门教程-从入门到精通

    目录 一.Springmvc入门 1.Springmvc是什么 2.Springmvc处理流程 3.入门程序 二.springMVC架构 1.springMVC的架构图 2.架构流程 3.spring ...

最新文章

  1. Asp.net 2.0 中将网站首页生成静态页的一个比较好的方法
  2. 哥德尔90年前的「不完备性定理」,奠定了计算机与AI的理论基础
  3. oracle11g数据文件路径,oracle11g修改数据文件路径
  4. unity, eulerAngle
  5. UVA 1025 A Spy in the Metro DP水题
  6. 万物智联时代的终端智能「管家」 重磅升级:混合云IoT一体机
  7. 针对模拟滚动条插件(jQuery.slimscroll.js)的修改
  8. 【硬件】推荐软件『软硬件的基准测试工具』
  9. [原创]Jenkins持续集成工具介绍
  10. 高斯计传感器使用的霍尔传感器原理
  11. matlab pv图,Matlab中imagesc
  12. LaTeX的下载安装及简易使用
  13. Excel筛选后无法复制粘贴成数值解决办法
  14. ai黑白棋_AI的黑白镜
  15. C语言电信优惠套餐推荐系统
  16. rpx 和 rem 详解
  17. NinePatch图片
  18. c++对象的生存期 静态生存期和动态生存期
  19. Keras LSTM输入的input的特征和时间纬度
  20. 罗技无线鼠标响应缓慢

热门文章

  1. hping 详解_HPing3构造多种类型DDOS攻击使用详解
  2. C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism
  3. CAD填充技巧:填充图案
  4. intellij idea的GitHub安装与使用教程
  5. 制定自己的SMART目标
  6. 大学排行榜 : qs全球世界 大学排行榜
  7. 适合初学者的PASCAL VOC2012数据集的下载及简单讲解
  8. 复旦新生计算机考试及格率,复旦大学本科新生《计算机办公自动化》课程入学考试考核大.doc...
  9. 蜡笔小新模拟器汉化版_FC蜡笔小新条码版下载-蜡笔小新条码版FC模拟器下载-电玩咖...
  10. python基础教程十进制_Python基础教程(四)