Flask初识

flask的初识

一.flask与django的比较

Django 15
优势 : 组件全 - admin - Model ORM - Forms
      教科书式
 
劣势 : 加载所有组件 - 占用资源较高
  重型框架

Flask 3
优势 : 轻如鸿毛 扩展性极强 三方组件全

劣势 : 什么组件都没有
  三方组件全 - 版本兼容问题 导致不稳

二.flask

1.Flask 安装 + 启动
from flask import Flask
app = Flask(__name__)
app.run()
#app.run('192.168.16.45',8000)通过此方法可以修改访问ip和端口

高级启动:
from flask import Flask
app = Flask(__name__)

@app.route("/")
def home():
return "Hello World!"

app.run()
2.Flask Response (响应)
1.HttpResponse("HelloWorld")    "HelloWorld" 返回字符串

2.from flask import render_template     需导入render_template 返回模板
render("模板路径")     --->括号内跟的html页面名称.默认存放路径 templates

3.from flask import redirect 重定向
redirect("/")       --->括号内跟的路由

Flask 中的返回特殊封装 2个
  1.jsonify 转换标准JSON格式
  响应头中加入 Content-type:application/json
  在Flask 1.1.1 版本中 加入了 直接返回字典 可以不再使用jsonify了

  例:@app.route('/')
   def home():
    return {'1':1}


  2.send_file 发送文件
  打开并返回文件内容,
  自动识别文件类型,
  响应头中加入Content-type:文件类型
  ps:当浏览器无法识别Content-type时,会下载文件

  例:@app.route('/file')
    def my_file():
      return send_file('111.mp4')
3.Flask Request(请求)
一个注意点:假登录,405 请求方式不被允许 - GET请求可以 但是POST请求 405 Method Not Allowed

解决方法: @app.route('/login',methods=('POST','GET')),
          添加methods方法,可写成列表,也可写成元祖
               
               
               
request知识点:
   from flask import request 公共对象

   1.request.form 获取FormData中的数据 - Form表单
   2.request.args # 获取URL中的参数
   3.request.files # 获取FormData中的文件数据
   print(request.url) # 获取访问路径
   print(request.method) # 获取请求方式
   print(request.path) # 路由地址 /login
   print(request.values) # Form 和 Args 中的数据
   # 综合获取 X
   print(request.args.get("id")) # 获取URL中的参数
   print(request.args["id"]) # 获取URL中的参数
   print(request.args.to_dict()) # 获取URL中的参数 转换成 字典

   print(request.environ) # 获取请求原始信息
   print(request.base_url) # 获取URL头,不包含参数

   print(request.json) # 毁三观 1 请求头中 Content-type:application/json 数据序列化 request.json
   print(request.data) # 毁三观 2 请求头中 Content-type 不包含 Form or data

   print(request.headers) # 请求头中的数据
 

4.Jinja2

{{}} 引用 or 执行 {%%} 逻辑语法 if else for

例:
{% for key,foo in STUDENT_LIST.items() %}
          <tr>
              <td>{{ foo.name }}</td>
              <td>{{ foo.age }}</td>
              {% if foo.gender != '男' and foo.gender != '女' %}
                  <td>女</td>
              {% else %}
                  <td>{{ foo.gender }}</td>
              {% endif %}

          </tr>
      {% endfor %}

 

5.Flask中的Session

from flask import session

session 交由客户端保管机制,session保管在前端的cookie下
  # eyJ1c2VybmFtZSI6IjEyMyJ9.XSVpHA.W0NfiCmW-lsTV0mvQI7mx2mf1Wo
  # .eJyrViotTi3KS8xNVbJSMjQyVtKBCxhiiBhhiBhjiJhgiJhiiJhBRWoBMFYkPg.XSVsaA.9merwNdTg3ZkZrdTumYRG7x8x7Y



验证session是否失效的过程:
反序列化机制 -
当客户端发起请求 - request 带上 Cookie - Cookie中有session的加密字符串 - Flask 收到Session加密字符串 - 通过secret_key解密session的加密字符串 - 获得 {username:123},然后检查后端数据库中是否存在session相关信息.


序列化机制 - 开启session - session["username"] = uname
先创建一个字典 {username:123} 接下来 通过secret_key + 时间戳 + 签名 加密 形成
# eyJ1c2VybmFtZSI6IjEyMyJ9.XSVpHA.W0NfiCmW-lsTV0mvQI7mx2mf1Wo session的加密字符串


 

 

原文地址:https://www.cnblogs.com/jingzu/p/11354723.html