主要内容:

  • 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_pathinstance_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)

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 - 基础相关推荐

  1. python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程

    ├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...

  2. 3.Flask基础-2

    Flask基础-Part 2 本章完成以下内容: Session与Cookie 文件上传 日志 重定向和错误 配置信息 一.Session与Cookie # 读取 cookies from flask ...

  3. 一篇博客搞定flask基础(完结)

    1.flask基础知识 1.1 flask框架介绍 Flask相比于django更加的轻量级,最核心的两个模块: Werkzeug(路由模块),模板引擎则使用 Jinja2.Flask不像django ...

  4. Flask 基础教学(一)

    Flask 基础教学(一) Flask 是一个轻量级的 Python Web 框架,非常适合新手入门.本教程将详细介绍 Flask 的基础知识,帮助您快速上手. 1. 环境准备 在开始学习 Flask ...

  5. Flask基础知识总结

    有一些东西是大多数网络应用都会用到的.比如许多应用都会使用关系型数据库和用户 验证,在请求之前连接数据库并得到当前登录用户的信息,在请求之后关闭数据库连接. 更多用户贡献的代码片断和方案参见 curr ...

  6. python - Flask 基础(1)

    这两天稍微接触了一点 Flask 框架,所以分享点基础 1. 配置文件 from flask import Flaskapp = Flask(__name__) # 使用自定义的配置文件 app.co ...

  7. Python Flask基础教程(入门)

    操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 参考资料:请点击 安装:pip install flask即可 一个简单的Flask from flask ...

  8. Flask基础(一)

    Flask 项目结构 projectName| - app # 应用程序包| - templates # jinjia2模板|- static # css,js 图片等静态文件| - main # p ...

  9. 轻量级web开发框架:Flask 基础教程

    Flask 简介 什么是Flask? Flask是一个用Python编写的Web应用程序框架.Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎. 什么是Web Framework ...

  10. python框架之Flask基础篇(一)

    一.第一个hello world程序 # coding=utf-8 from flask import Flaskapp = Flask(__name__)@app.route('/') def he ...

最新文章

  1. springboot api版本控制_SpringBoot入门练习
  2. Python 装饰器原理和基本实现
  3. 0401互联网新闻 | 企业微信新版发布;阿里巴巴发布“AI谣言粉碎机”
  4. mysql 5.7.17源码包_centos7 mysql5.7.17源码安装
  5. JSON模式在构建和部署API中的作用
  6. git checkout 单个文件_IntelliJ IDEA下的使用 Git
  7. C#中写入Excel
  8. C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号
  9. 用计算机算小学题目,小学计算机入编考试考试试题.doc
  10. MySQL解析json字符串的相关问题
  11. 假如中了1800万彩票,怎么做保持利益最大化
  12. docker容器使用-图解
  13. 【安装配置】DBCA创建数据库(图形界面)
  14. excel二极管伏安特性曲线_电视机不被烧,是因为它?一个拥有反向特性的稳压二极管...
  15. “不能初始化photoshop,因为暂存盘已满”图文解决方案
  16. 人机交互(HCI)界面设计(笔记)
  17. C语言六边形蜂巢数组,生活中的数学之奇妙的蜂窝构造
  18. UDP进程terminated
  19. python数据挖掘课后题答案_中国大学MOOC《数据挖掘与python实践》章节答案
  20. NI-​DAQmx​的​定​时​和​同步​特性

热门文章

  1. java便签小程序原码_localStorage实现便签小程序
  2. u8 api开发报类型不匹配错误_小程序云开发入门学习,小程序支付功能常见错误汇总及解决方案...
  3. HTML5 file对象和blob对象的互相转换
  4. Mybatis中出现java.sql.SQLException: 无效的列类型: 1111
  5. MySQL 存储过程 if语句
  6. Android6.0之后的权限机制对App开发的影响
  7. mac obs 录屏黑屏_有了它,我把其他录屏软件都卸载了!
  8. redis学习之redis的安装和简介
  9. JS的forEach和map方法的区别
  10. Union/find--不相交集类(并查集)