博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask - 基础
阅读量:4677 次
发布时间:2019-06-09

本文共 4460 字,大约阅读时间需要 14 分钟。

主要内容:

  • 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("模板名称") 默认存放路径 = templates    redirect            #return redirect("/login")    Flask 特殊    jsonify             #return jsonify({"name":1}) # 在响应头中加入 Content-type:application/json                           - app.config["JSONIFY_MIMETYPE"]        send_file           #return send_file("文件路径") # 打开并返回文件内容
  • session
    #存在浏览器上,并且是加密的# 依赖于:secret_keyfrom flask import  Flask,request,render_template,sessionapp.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.args        s2 = 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=2s4 name=%27%E8%83%A1%E5%86%B2%27&nid=2s5 name='胡冲'&nid=2s6 name='胡冲'&nid=2s7 %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 sessionapp = 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

你可能感兴趣的文章
HDU 6319(单调队列)
查看>>
Codeforces 1041C(贪心+set)
查看>>
Android 常用数据操作封装类案例
查看>>
php方法 隐藏手机号中间四位
查看>>
程序员技术练级攻略
查看>>
Binary Agents
查看>>
需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
查看>>
django之同源策略
查看>>
org.springframework.beans.factory.BeanCreationException...
查看>>
大量文本框非空判断,如何提高灵活性?
查看>>
作用域模型分析
查看>>
js动态创建元素和删除
查看>>
JAVA(时间对比排序程序)
查看>>
complex()
查看>>
java之try catch finally
查看>>
各种字符串hash
查看>>
数据状态什么是事务?
查看>>
测试构造器它山之玉可以重构:身份证号(第四天)
查看>>
JS与PHP向函数传递可变参数的区别
查看>>
单元测试之初识
查看>>