Flask中的Resquest,Responed和会话技术

开发者服务器

  • 只适合用来做开发的服务器
  • 不能应用于实际项目上
  • 优点
    • 对开发者比较友好
    • 自动重启
    • 丰富的日志
    • 页面调试
  • 缺点
    • 性能低

HTTP请求方法

  • GET

    • 获取,拿
    • 用在从服务器获取数据,获取资源
  • POST

    • 提交
    • 用来向服务器提交传递(submit)
    • 最多用在创建,验证
  • DELETE

    • 删除
    • 告诉服务器,我要删除某资源
  • PUT

    • 提交
    • 用来向服务器提交数据
    • 通常PUT用来更新数据
  • PATCH

    • 补丁
    • 提交
    • 用来向服务器提交数据
    • 通常PATCH用来差量更新数据

Flask设置请求方法

  • 默认支持get请求
  • 想要支持自定义请求
    • @app.route("/xxx/", methods=["GET", "POST"])

路由器router的获取

  # python中的写法
  @app.route("/register/", methods=["GET", "POST"])
  def register():
      return
  @app.route("/doregister/", methods=["GET", "POST"])
  # 路由返回的是字符串,可以在返回值里面直接加标签代码:<a>lable</a>
  def do_register():
      return
  {#html 中的写法#}
  <a href="register">login</a>
  <form action="/doregister/" method="post">

Flask中的View

  • View中存在两个重要的对象

  • 双R

    • Request
      • 客户端发送的请求
      • 里面包含了客户端的各种信息
      • Request不是客户端创建的
      • 是框架根据客户端的数据(请求报文)创建的
      • 属于Flask中的内置对象,不可修改
      • 请求的生命周期:从Request开始到Response结束
      • Request属性
        • url 完整请求地址
        • base url去掉GET参数的URL
        • host url 只有主机和端口号的URL
        • path 请求中的路径
        • method 请求方法
        • remote addr 请求的客户端地址
        • args GET请求参数
        • form POST请求参数
        • files 文件上传
        • headers 请求头
        • cookies 请求中的cookie
    • Response
      • 服务器返回给客户端的数据
      • 由开发者创建
      • 存在很多种创建方式
        • 直接返回字符串
          • return 'log in success'
        • 可以返回模板
          • return render_template('login.html')
        • 直接返回Response对象
          • 直接创建 Response()
          • 也可以使用 make_response(data, code)
            • 第一个参数是内容, 第二个参数是状态码
  • 响应的类型

    • 直观的响应请求

      • return render_template('index.html')
    • 重定向请求

      • redirect(’/’) 重定向到根目录(首页)
      • url_for 动态获取IP地址
      • redirect(url_for('do_register')) do_register 是定义的 router 路由
    • 主动终止请求

      • abort(404)
      • abort(Response('Hello World'))# Response包装的一个WSGI应用
    • 捕获异常

      • @app.errorhandler(404)
        def hello(e):
        	return 'LOL'
        

    捕获POST和GET请求

    • 通过POST获取参数
      • username = request.form.get('username') 通过form表单来传入参数
    • 通过GET获取参数
      • username = request.args.get('username') 通过args传入参数
    • 判断请求
      • if request.method == 'GET' if流程控制来处理请求

会话技术

  • 请求周期非常短

  • HTTP无状态协议

    • 协议对于事务处理没有记忆能力
  • HTTP都是短连接

    • 客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
      • 从HTTP/1.1起,默认使用TCP来保持长连接,用以保持连接特性
  • 分类

    • Cookie

      • 客户端会话技术
      • 通过Response写到浏览器上,数据都存储在客户端
        • response.set_cookie(key,value[max_age=None,exprise=None])
        • request.cookie.get(key)
      • 特性
        • 默认请求会携带本网站的所有Cookie
        • Cookie不能跨网站,不同的域名,不同的ip
        • Cookie不能跨浏览器
        • Cookie以key-value 存储
        • Cookie支持过期
          • Flask默认关闭浏览器,Cookie过期
          • max_age:整数,指定cookie过期时间,None永不过期
          • expries:整数,可以指定具体日期(二选一)
          • 删除cookie response.delete_cookie(key)
        • 缺点
          • 不安全
          • 明文传输
    • Session

      • 服务端会话技术

      • 数据都存储在服务端

      • 特性

        • 依赖于Cookie

        • Session以key-value存储

          • 设置键值对 session['username'] = 'value'
          • 获取键值对 get(key,default=None)
          • 删除键值对 pop(key)
          • 清除所有 clear()
        • 相对安全

          • app.config["SECRET_KEY"] = "secret_key"
        • 不能跨网站,不能跨域名

        • 支持过期

          • session.permanent = True
            # permanent_session_lifetime设置过期时间
            session.permanent_session_lifetime = timedelta(days=1)
            
    • Token (不支持Cookie的场景)

      • 手机App
      • 服务端会话技术
      • 自定义的服务端会话技术
      • 数据存储,查询,修改,令牌(唯一标识,session_key, session_id)发放完全由服务器控制

会话场景

  • 需要数据跨越请求存在
  • 延长请求中的数据的生命周期

猜你喜欢

转载自blog.csdn.net/qq_27114273/article/details/90215074