Flask搭建网站学习笔记
date
Mar 9, 2022
slug
python-flask-study
status
Published
tags
Python
summary
学习通过使用Python的Flask包来快速搭建网页
type
Post
此网站为本次笔记主要来源,以及更加详细内容这样直接去源站查看:
1 Flask概述1.1 有关信息1.1.1 Web应用程序框架(Web Application Framework)1.1.2 Flask1.1.3 WSGI(Web Server Gateway Interface)1.2 环境搭建1.2.1 virtualenv1.2.2 Flask2 代码学习2.1 构建网站基本功能2.1.1 启动器介绍2.1.3 变量规则2.1.3 HTTP方法2.1.4 返回模板2.1.5 静态文件2.1.6 表单与模板数据传递2.1.7 Cookies2.1.8 Sessions2.1.9 返回错误代码2.1.10 flash消息2.1.11 文件上传2.2 Flask扩展2.2.1 邮件 Flask-Mail2.2.2 表单 Flask-WTF2.2.3 数据库 SQLite 3 & SQLAlchemy2.2.4 AJAX请求 sijax2.2.5 UI组件 Boostrap-Flask
1 Flask概述
1.1 有关信息
1.1.1 Web应用程序框架(Web Application Framework)
Web应用程序框架或简单称为Web Framework表示库和模块的集合,使Web应用程序开发人员编写应用程序不用担心底层协议、线程管理等细节。
1.1.2 Flask
Flask是一个用Python编写的Web应用程序框架。由Armin Ronacher及其领导的国际Python爱好者团队Pocco开发。Flask也是基于Pocco团队的Werkzeug WSGI工具包和Jinja2模板引擎之上进行开发的。其中Werkzeug实现请求、响应对象和实用函数,jinja2作为流行的模板引擎,通过Web模板系统将模板与特定数据源组合以呈现动态网页。
1.1.3 WSGI(Web Server Gateway Interface)
WSGI全称为Web服务器网关接口,已被用于作为Python Web应用程序的开发标准。WSGI是web服务器和Web程序之间通用的接口规范。
1.2 环境搭建
1.2.1 virtualenv
推荐安装virtualenv避免污染不同版本的库。PyCharm自带virtualenv,创建Project时可以选择。
安装命令
pip install virtualenv
激活命令
venv/bin/activate
(Linux)或venv\scripts\activate
(Windows)1.2.2 Flask
安装命令
pip install Flask
2 代码学习
2.1 构建网站基本功能
2.1.1 启动器介绍
2.1.3 变量规则
可以向规则部分添加参数,动态构建URL。此部分标记为
<variable-name>
,支持整数int,浮点数float,带”/”的路径path。2.1.3 HTTP方法
创建一个login.html。
在Flask下添加对应的处理函数,即可实现数据处理与跳转响应。
2.1.4 返回模板
创建名为hello.html的模板(Template),并增加相关的处理函数。
2.1.5 静态文件
例如html关联js脚本的格式,如下,依次为template文件夹下的index.html,static文件夹下的hello.js,Python路由内容。
2.1.6 表单与模板数据传递
以下分别是表单form.html、输出模板output.html、Python处理函数代码。
2.1.7 Cookies
Cookie以文本形式存在于客户端上。目的是记住与跟踪客户使用相关数据,以此获得更好的访问体验。Flask中处理Cookie如下:
2.1.8 Sessions
Session(会话)数据存在服务器上。一段会话时间是从用户登录到用户注销的时间间隔,期间保存的数据将会存储在服务器临时目录下。每个客户端会分配一个会话ID,会话数据存储在Cookie顶部,服务器对其进行加密签名。对于此加密,Flask需要设置一个secret_key。Session也是一个字典对象,包含所需的键值对。以下为样例:
2.1.9 返回错误代码
Flask错误代码函数为
abort(CODE)
。其中code可以为400、401、403、404、406、415、429,分别表示错误请求、未身份验证、Forbidden禁止、未找到、不接受、不支持的媒体类型、请求过。样例代码如下:2.1.10 flash消息
使用闪现系统向用户反馈信息,Python方法为
flash(message, category)
,其中message为所传递的消息,category为消息类型,可以为"error"
、"info"
、"warning"
这三种。模板则调用get_flash_messages(with_catagories, with_filter)
以此获得并删除消息队列中内容,两个参数均为可选的,第一个表示消息类型,第二个显示特定消息。index.html、login.html模板和Flask方法示例如下:2.1.11 文件上传
在模板的表单中设置
enctype
为"multipart/form-data"
即可将文件发布到URL。URL处理程序用request.files[]
对象中提取文件。其中文件名可以是硬编码也可以从request.files[file]
对象的filename
中获取,使用secure_filename()
可以获取安全版本。Flask也可以设置默认上传文件路径和文件大小,分别使用app.config['UPLOAD_FOLDER']
和app.config['MAX_CONTENT_LENGTH']
设置。upload.html模板和Flask方法样例如下:2.2 Flask扩展
构建网站需要的更多功能由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:简单而可扩展的管理接口的框架。
2.2.1 邮件 Flask-Mail
使用邮件扩展需要先安装flask-mail包,导入为flask_mail。样例代码如下:
2.2.2 表单 Flask-WTF
这一部分的学习内容由于Flask-WTF以及WTForms的更新许多东西与w3c样例有变化,如果需要学习对应版本内容,建议直接从官方网页进行学习,链接如下:
2.2.3 数据库 SQLite 3 & SQLAlchemy
SQLite3是Python内置库,不需要额外添加,这一部分需要额外学习SQLite3库相关用法,建议寻找官方文档学习。在Flask中使用g对象
before_request()
和tardown_request()
分别在请求前和请求后打开关闭数据库连接,使用g.db
可以直接获取当前数据库连接。SQLAlchemy是常用的数据抽象层,需要一定的声明才能使用。详情可参考文档:
2.2.4 AJAX请求 sijax
sijax代表“simple ajax”,它是一个python/jquery库。使用方法可以参考如下文档:
2.2.5 UI组件 Boostrap-Flask
区别于Flask-Boostrap,Flask-Boostrap维护不及时,甚至不能使用Boostrap 4。而Boostrap-Flask可以支持Boostrap 5,具体可见文档: