Flask - 基础
主要内容:
- 1. Flask基本概述
- 2. 请求相关
- 3. Flask中模板语言 jinja2
- 4. 内置Session
1. Flask 基本概述:
1.1 web框架 Django,Flask, Tornado 的对比
特点:
- 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你用得到用不到,反正它全都有,属于全能型框架
- 2.Tornado 主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架
- 3.Flask 主要特点小而轻,原生组件几乎为0, 三方提供的组件请参考Django 非常全面,属于短小精悍型框架
使用方面
- Django 通常用于大型Web应用由于内置组件足够强大所以使用Django开发可以一气呵成
- Tornado 通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞真是稳得一批
- Flask 通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的Web应用
优缺点:
- Django 优点是大而全,缺点也就暴露出来了,这么多的资源一次性全部加载,肯定会造成一部分的资源浪费
- Tornado 优点是异步,缺点是干净,连个Session都不支持
- Flask 优点是精悍简单,缺点是过分依赖于第三方插件
1.2实例化一个 Flask 对象
app = Flask(__name__) # 这是实例化一个Flask对象,最基本的写法 # 但是Flask中还有其他参数,以下是可填的参数,及其默认值def __init__(self, import_name, static_path=None, static_url_path=None,static_folder='static', template_folder='templates',instance_path=None, instance_relative_config=False,root_path=None):
其他参数:
- template_folder:模板所在文件夹的名字
- root_path:可以不用填,会自动找到,当前执行文件,所在目录地址(在return render_template时会将上面两个进行拼接,找到对应的模板地址)
- static_folder:静态文件所在文件的名字,默认是static,可以不用填
- static_url_path:静态文件的地址前缀,写成什么,访问静态文件时,就要在前面加上这个
app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')
instance_path和instance_relative_config是配合来用的 (这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings.py')这种方式导入配置文件的时候会用到)
instance_relative_config:默认为False,当设置为True时,from_pyfile会从instance_path指定的地址下查找文件。
instsnce_path:指定from_pyfile查询文件的路径,不设置时,默认寻找和app.run()的执行文件同级目录下的instance文件夹;如果配置了instance_path(注意需要是绝对路径),就会从指定的地址下里面的文件
2. 请求相关
2.1 获取请求数据 & 响应
- Request
request.method #存放 HTTP 请求方式request.form #存放 FormData 中的数据request.args #存放 URL 中的参数数据request.data #存放 原始请求体中数据 因为 Content-type : 不被认可,原始请求体中数据request.json #存放 Content-type:application/json request.files #存放 FormData 中文件数据request.path #获取当前访问路径的路由地址(/login)
- Response
HttpResponse #return "字符串"render_template #return render_template("模板名称") 默认存放路径 = templatesredirect #return redirect("/login") Flask 特殊jsonify #return jsonify({"name":1}) # 在响应头中加入 Content-type:application/json- app.config["JSONIFY_MIMETYPE"]send_file #return send_file("文件路径") # 打开并返回文件内容
- session
#存在浏览器上,并且是加密的 # 依赖于:secret_key from flask import Flask,request,render_template,session app.config["SECRET_KEY"] ="aewqweqe"........ session["user"] = request.form.get("username")
另外: flask中获取URL后面的参数(from urllib.parse import urlencode,quote,unquote)
![](/assets/blank.gif)
![](/assets/blank.gif)
from urllib.parse import urlencode,quote,unquotedef login():if request.method == 'GET':s1 = request.argss2 = request.args.to_dict()s3 = urlencode(s1)s4 = urlencode(s2)s5 = unquote(s3)s6 = unquote(s4)s7 = quote("胡冲")print('s1',s1)print('s2',s2)print('s3',s3)print('s4',s4)print('s5',s5)print('s6',s6)print('s7',s7)return render_template('login.html')#############结果如下#################### s1 ImmutableMultiDict([('name', "'胡冲'"), ('nid', '2')]) s2 {'name': "'胡冲'", 'nid': '2'} s3 name=%27%E8%83%A1%E5%86%B2%27&nid=2 s4 name=%27%E8%83%A1%E5%86%B2%27&nid=2 s5 name='胡冲'&nid=2 s6 name='胡冲'&nid=2 s7 %E8%83%A1%E5%86%B2
View Code
3. Flask中模板语言 jinja2
3.1 jinja2模板语言
- {{ }} 取值 执行
- {% %} 逻辑代码 for if else macro
4. 内置Session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪
Session
- Flask中的session是需要secret_key的
# secret_key 实际上是用来加密字符串的,如果在实例化的app中没有 secret_key 那么开启session一定会抛异常的 from flask import session app = Flask(__name__) app.secret_key = "DragonFire"
- session的使用
#session["user"] = USER["username"] 这样用就代表这个请求带上来的session中保存了一个user=name @app.route("/login", methods=["GET", "POST"]) def login():if request.method == "POST":if request.form["username"] == USER["username"] and request.form["password"] == USER["password"]:session["user"] = USER["username"]return redirect("/student_list")return render_template("login.html", msg="用户名密码错误")return render_template("login.html", msg=None) # 如果前端Jinja2模板中使用了msg,这里就算是传递None也要出现msg
- cookies中的session
#cookies 中 session 存储的是通过 secret_key 加密后的 key , 通过这个 key 从flask程序的内存中找到用户对应的session信息
- 用session进行验证
#进行验证 @app.route("/student_list") def student():if session.get("user"):return render_template("student_list.html", student=STUDENT_DICT)return redirect("/login")
转载于:https://www.cnblogs.com/wcx666/p/10446956.html
Flask - 基础相关推荐
- python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程
├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...
- 3.Flask基础-2
Flask基础-Part 2 本章完成以下内容: Session与Cookie 文件上传 日志 重定向和错误 配置信息 一.Session与Cookie # 读取 cookies from flask ...
- 一篇博客搞定flask基础(完结)
1.flask基础知识 1.1 flask框架介绍 Flask相比于django更加的轻量级,最核心的两个模块: Werkzeug(路由模块),模板引擎则使用 Jinja2.Flask不像django ...
- Flask 基础教学(一)
Flask 基础教学(一) Flask 是一个轻量级的 Python Web 框架,非常适合新手入门.本教程将详细介绍 Flask 的基础知识,帮助您快速上手. 1. 环境准备 在开始学习 Flask ...
- Flask基础知识总结
有一些东西是大多数网络应用都会用到的.比如许多应用都会使用关系型数据库和用户 验证,在请求之前连接数据库并得到当前登录用户的信息,在请求之后关闭数据库连接. 更多用户贡献的代码片断和方案参见 curr ...
- python - Flask 基础(1)
这两天稍微接触了一点 Flask 框架,所以分享点基础 1. 配置文件 from flask import Flaskapp = Flask(__name__) # 使用自定义的配置文件 app.co ...
- Python Flask基础教程(入门)
操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 参考资料:请点击 安装:pip install flask即可 一个简单的Flask from flask ...
- Flask基础(一)
Flask 项目结构 projectName| - app # 应用程序包| - templates # jinjia2模板|- static # css,js 图片等静态文件| - main # p ...
- 轻量级web开发框架:Flask 基础教程
Flask 简介 什么是Flask? Flask是一个用Python编写的Web应用程序框架.Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎. 什么是Web Framework ...
- python框架之Flask基础篇(一)
一.第一个hello world程序 # coding=utf-8 from flask import Flaskapp = Flask(__name__)@app.route('/') def he ...
最新文章
- springboot api版本控制_SpringBoot入门练习
- Python 装饰器原理和基本实现
- 0401互联网新闻 | 企业微信新版发布;阿里巴巴发布“AI谣言粉碎机”
- mysql 5.7.17源码包_centos7 mysql5.7.17源码安装
- JSON模式在构建和部署API中的作用
- git checkout 单个文件_IntelliJ IDEA下的使用 Git
- C#中写入Excel
- C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号
- 用计算机算小学题目,小学计算机入编考试考试试题.doc
- MySQL解析json字符串的相关问题
- 假如中了1800万彩票,怎么做保持利益最大化
- docker容器使用-图解
- 【安装配置】DBCA创建数据库(图形界面)
- excel二极管伏安特性曲线_电视机不被烧,是因为它?一个拥有反向特性的稳压二极管...
- “不能初始化photoshop,因为暂存盘已满”图文解决方案
- 人机交互(HCI)界面设计(笔记)
- C语言六边形蜂巢数组,生活中的数学之奇妙的蜂窝构造
- UDP进程terminated
- python数据挖掘课后题答案_中国大学MOOC《数据挖掘与python实践》章节答案
- NI-​DAQmx​的​定​时​和​同步​特性
热门文章
- java便签小程序原码_localStorage实现便签小程序
- u8 api开发报类型不匹配错误_小程序云开发入门学习,小程序支付功能常见错误汇总及解决方案...
- HTML5 file对象和blob对象的互相转换
- Mybatis中出现java.sql.SQLException: 无效的列类型: 1111
- MySQL 存储过程 if语句
- Android6.0之后的权限机制对App开发的影响
- mac obs 录屏黑屏_有了它,我把其他录屏软件都卸载了!
- redis学习之redis的安装和简介
- JS的forEach和map方法的区别
- Union/find--不相交集类(并查集)