Flask框架学习入门教程大纲

本教程详细介绍了Flask框架的基础知识,包括Flask的诞生背景、路由和视图的设定、虚拟环境的创建与管理、HelloWorld程序的编写、配置信息、路由参数、自定义转换器、响应信息以及异常处理。同时,文章也涉及到了视图内容如状态保持(cookie、session)、模板引擎Jinja2的使用,数据库操作和ORM,以及数据库迁移、蓝图和单元测试等进阶主题。
摘要由CSDN通过智能技术生成

教程内容大纲

参考视频教程:https://www.bilibili.com/video/BV1Lf4y117PS
中文文档:http://docs.jinkan.org/docs/flask/
英文文档:https://flask.palletsprojects.com/en/2.3.x/

第一部分:路由和视图

1. Flask简介

  • 作者:Armin Ronacher
  • 诞生时间:2010年
  • 组成:Werkzueg+Jinja2+额外扩展包
    • werkzueg:专门用来处理请求相关的内容,如:地址。
    • Jinja2:用来做页面渲染处理的。
    • 额外的扩展包:可以做数据库的连接、站点管理、数据库迁移、缓存处理(flask-cache)等,常用的flask扩展包模块如下:
      • Flask-SQLalchemy:操作数据库;
      • Flask-script:插入脚本;
      • Flask-migrate:管理迁移数据库;
      • Flask-Session:Session存储方式指定;
      • Flask-WTF:表单;
      • Flask-Mail:邮件;
      • Flask-Bable:提供国际化和本地化支持、翻译;
      • Flask-Login:认证用户状态;
      • Flask-OpenID:认证;
      • Flask-RESTful:开发REST API工具;
      • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
      • Flask-Moment:本地化时间和日期;
      • Flask-Admin:简单而可扩展的管理接口的框架。
      • 更多扩展参考:http://flask.pocoo.org/extensions/

2. 虚拟环境

  • 什么是虚拟环境?
    • 它就是一个特殊的文件夹,里面存放着程序运行所需要的各种版本的Python解释器和各种版本的框架。
  • 虚拟环境的安装和操作命令(Ubantu环境)
    1. 先查看操作系统中是否有虚拟环境?
      virtualenv -version
      
    2. 如果查看之后没有虚拟环境的命令,则安装:(需联网)
      pip install virtualenv
      pip install virtualenvwrapper
      
    3. 查看当前操作系统中有哪些虚拟环境的文件夹?
      workon
      
    4. 创建虚拟环境文件夹(需联网)
      # 该命令安装好之后,默认的Python解释器是Python2.x
      mkvirtualenv 文件夹名字
      
      # 指定安装Python3.x的解释器
      mkvirtualenv -p python3 虚拟环境文件夹名
      
    5. 从虚拟环境中退出
      deactivate [虚拟环境文件夹名]
      
    6. 进入到虚拟环境中
      workon 虚拟环境名称
      
    7. 删除虚拟环境
      rmvirtualenv 虚拟环境名称
      
    8. 安装flask框架
      pip install flask==0.10.1
      
    9. 查看当前虚拟环境中有哪些扩展
      pip freeze
      
    10. 导出虚拟环境中用到的所有扩展
      pip freeze > requirements.txt
      
    11. 安装requirements.txt文件中的扩展
      pip install -r requirements.txt
      
  • 虚拟环境的安装和操作命令(Windows系统)
    # 1. 安装虚拟环境
    pip install virtualenvwrapper-win
    # 2. 检查是否安装成功
    workon
    # 出现如下提示表示安装成功:
    # C:\Users\Administrator>workon# Pass a name to activate one of the following virtualenvs:
    # ==============================================================================
    # 找不到文件
    
    # 3. 创建虚拟环境
    virtualenv 虚拟环境名
    
    # 4. 删除虚拟环境
    rmvirtualenv 虚拟环境名称
    # 5. 安装指定版本的flask框架
    pip install flask==0.10.1
    
    # 6. 查看已安装的扩展
    pip freeze
    
    # 7. 退出虚拟环境
    deactivate 虚拟环境名称
    
    # 8. 进入虚拟环境
    workon 虚拟环境名称
    
    # 9. 导出虚拟环境中的所有扩展
    pip freeze > requirements.txt
    

3. helloworld程序

# 1. 从flask模块中导入Flask类
from flask import Flask

# 2. 创建Flask对象
# 参数1:__name__,如果从当前文件启动,那么值是__main__,如果是从其他模块调用运行的那么值是模块的名字
# 参数2:static_url_path,表示静态资源(如css文件、js文件、图片等)的访问地址,/static
# 参数3:static_folder,用来存储静态资源的,默认名字是static,需要创建一个static文件夹
# 参数4:template_folder,模板文件夹,特指一些html文件,默认的值是templates,需创建一个templates文件夹
app = Flask(__name__)    # Ctrl+P查看方法中的参数    # app是application的简写
print(__name__)     # __main__
print(app.static_url_path)    # /static
print(app.static_folder)  # D:\Python_project\Flask\test1\static
print(app.template_folder)    # templates

# 使用app,通过路由绑定一个视图函数
# 注意点:视图函数一定要有返回值。(此返回结果是给浏览器的)
@app.route('/')
def hello_world():
	return "hello world Flask"


# 判断是否直接使用当前模块运行程序
if __name__ == "__main__":
	# 运行app程序    访问地址是:http://127.0.0.1:5000
	app.run()

4. 配置信息(app,环境变量)

app.run()参数
  • 参数1:host,如果我们不指定,默认值是127.0.0.1。
  • 参数2:port,如果我们不指定,默认值是5000。
  • 参数3:debug,调试模式,如果不指定,默认值是False。
    • 如果设置为True,有两个好处:
      1. 如果在运行过程中,直接改动代码了,就不需要重新启动程序,只要Ctrl+S保存即可部署程序。
      1. 如果程序报错了,会有友情提示。
from flask import Flask


app = Flask(__name__)


@app.route('/hh')
def index():
    print(1/0)
    return "<h2>this is index</h2>"


if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000, debug=True)

5. 路由信息(路径、参数、请求方式)

1. 在访问路由的时候指定参数
  • 格式:@app.route(“/<类型:变量名>”)
    • 常见的类型:
      1. 整数:int
      1. 小数:float
      1. 字符串:path(默认就是path)
"""
在访问路由的时候指定参数

- 格式:@app.route("/<类型:变量名>")
- 常见的参数类型
    - 整数 int
    - 小数 float
    - 字符串 path     默认就是path
"""""
from flask import Flask

app = Flask(__name__)


# 接收一个整数
@app.route('/<int:num>')
def get_intnumber(num):
    return "the age is %s" % num


# 接收一个小数
@app.route('/<float:num>')
def get_floatnumber(num):
    return "the float is %s" % num


# 接收一个字符串
@app.route('/<path:str1>')
def get_pathnumber1(str1):
    return "the path is %s" % str1


# 接收一个字符串
@app.route('/<str1>')
def get_pathnumber2(str1):
    return "the path is %s" % str1


if __name__ == "__main__":
    app.run(debug=True)
2. 自定义参数类型(自定义转换器)
  • 应用情况:
    • 如果系统提供的int、flost、path等参数满足不了需求的时候,我们需要自定义。
    • 之所以int、float、path可以接收不同的数据类型,是因为系统已经提供好对应的转换器了。
  • 自定义转换器的格式:
      1. 定义类,继承自BaseConverter。
      1. 重写init方法,接收来两个参数。
      1. 初始化父类成员变量,还有子类自己的规则。
      1. 将转换器类,添加到系统默认的转换器列表中。
"""
- 自定义转换器的格式:
    - 1. 定义类,继承自BaseConverter。
    - 2. 重写init方法。
    - 3. 初始化父类成员变量,还有子类自己的规则。
    - 4. 将转换器类,添加到系统默认的转换器列表中。
    
    需求:只接收3位整数
"""""
from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)


# - 1. 定义类,继承自BaseConverter。
class MyRegexConverter(BaseConverter):
    # 下面这样直接指定匹配规则,不够灵活,具体匹配什么规则应该交给路由
    # regex = "\d{3}"       # 仅匹配3位整数

    # - 2. 重写init方法。接收两个参数
    def __init__(self, map, regex):
        # - 3. 初始化父类成员变量,还有子类自己的规则。
        super(MyRegexConverter, self).__init__(map)
        self.regex = regex


# - 4. 将转换器类,添加到系统默认的转换器列表中。
app.url_map.converters["haha"] = MyRegexConverter


# 匹配三位整数
# 使用haha(‘规则’),实际上是传递了两个参数,参数1:app.url_map,参数2:括号中写的正则表达式
@app.route('/<haha("\d{3}"):number>')
def get_three_number(number):
    return "the three number is %s" % number


# 匹配四位整数
@app.route('/<haha("\d{4}"):number>')
def get_four_number(number):
    return "the four number is %s" % number


# 匹配一个手机号
@app.route('/<haha("1[3-9]\d{9}"):phone>')
def get_phone_number(phone):
    return "the phone is %s" % phone


if __name__ == "__main__":
    app.run(debug=True)

6. 响应信息(json、redirect、url_for、状态码)

1. 直接返回响应体数据
  • return ‘字符串’
2. 直接返回响应体数据+状态码
  • return ‘字符串’, 状态码
3. 直接返回响应体数据+状态码+响应头信息
  • return ‘字符串’, 状态码, {‘key’: ‘value’}

7. 系统转换器、自定义转换器

8. abort、errorhandler、异常处理

9. 请求钩子

10. request请求参数

第二部分:视图内容和模板

1. 状态保持(cookie、session)

2. 上下文(理解)

3. flask_script扩展

4. jinjia2模板概念

5. render_template函数,模板语法

6. 模板自带过滤器

7. 自定义过滤器

8. 模板案例练习

9. 代码复用(宏、继承、包含)

10. csrf攻击

第三部分:数据库

1. ORM描述

2. flask_sqlalchemy扩展

3. 数据库的增删改查操作

4. 案例-图书管理

5. 数据库表,多对多关系

6. 数据库表,关系模板代码

第四部分:迁移、蓝图、测试

1. 数据库迁移

2. 模块化开发之蓝图

3. 单元测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值