• Flask系列-程序基本结构


    一、前言

    感觉自己不写点什么记录下来的话就会忘掉,虽然写点什么也可能会忘掉,但可能会更有动力看下去这样子

    二、程序的基本结构

    1.一个最开始的程序

    • # -*- coding:utf-8 -*-
      from flask import Flask
      

      app = Flask(name)

      @app.route('/') #使用app.route修饰器,把修饰函数注册为路由
      def index(): #index()这样的函数就叫视图函数
      return '<h1>Hello World!<h1>'

      @app.route('/user/<int::id>') int;float;path:字符串不把/视作分隔符

      @app.route('/user/<name>')
      def user(name):
      return '<h1>Hello, %s!<h1>' %name

      if name == 'main':
      #debug=Ture启用调试模式
      app.run(debug=True) #run方法启动Flask集成的开发Web服务器

    2.请求

    • 为避免大量非必要参数弄得搞乱视图函数,Flask使用上下文临时把某些对象变为全局可访问。

      使用前需先激活程序上下文或请求上下文,处理完成后再删除

      • 程序上下文:

        • current_app:当前激活程序的程序实例
        • g:处理请求时用作临时储存的对象;每次请求都会重设这个变量
      • 请求上下文:

        • request:请求对象,封装客户端发出的HTTP请求中的内容
        • session:用户会话,用于存储请求之间需要“记住”的值的词典

      虽然不太懂除了request其他的怎么用,但是书上说后面会讲到的......

    • Flask使用上下文让特定的变量在一个线程中全局可访问,同时却不会干扰其他进程。

    • 此时request被当作某线程中的全局变量:

      # -*- coding:utf-8 -*-
      from flask import Flask
      from flask import request	#引入
      

      app = Flask(name)

      @app.route('/')
      def User_Agent():
      user_agent = request.headers.get('User-Agent')
      return '<p>You brower is %s</p>' %user_agent

      if name == 'main':
      app.run(debug=True)

    3.请求钩子

    都先注册一个函数:

    • before_first_request:在处理第一个请求之前运行
    • before_request:在每次请求之前运行
    • after_request:如果 无 未处理异常 抛出,在每次请求之后运行
    • teardown_request:即使 有 未处理异常 抛出,也在每次请求后运行

    在请求钩子函数和视图函数间一般通过上下文全局变量 g 共享数据

    • before_first_request从数据库中加载已登陆用户,并将其保存到 g .user 中
    • 随后调用视图函数时,视图函数再使用 g.user 获取用户

    虽然有一点点懂,但是书上说后面会讲到的......

    4.响应

    • 大多数情况下,响应是一个简单的字符串,并作为HTML页面回送客户端

    • 若视图函数返回的响应需使用不同状态码,可以把数字代码作为第二个返回值

      @app.errorhandler(404)
      def page_not_found(e):
          return render_template('404.html'), 404
      
    • 视图函数可返回 Response 对象:

      • make_sense() 可接受1~3个参数,并返回一个Response对象:

        from flask import make_response
        

        @app.route('/')
        def index():
        response = make_response('This document carries a cookie!')
        response.set_cookie('answer','42')
        return response

    • 重定向 302:redirect()

      from flask import redirect
      

      @app.route('/')
      def index():
      return redirect('http://www.xxxx.com')

    • 错误处理 :abort()

      #如果URL中动态参数id对应的用户不存在,就返回404
      from flask import abort
      

      @app.route('/user/<id>')
      def get_user(id):
      user = load_user(id)
      if not user:
      abort(404)
      return 'Hello, %s' %user,name

  • 相关阅读:
    [转]几个开源的.net界面控件
    电脑上设置对眼睛友好的绿豆沙色
    [转] C# 绘制报表,使用Graphics.DrawString 方法
    Excel 绘制图表,如何显示横轴的数据范围
    [转] C#中绘制矢量图形
    Chapter 3 Protecting the Data(3):创建和使用数据库角色
    续x奇数倍(n+2*x)暴力算法是冠军的算法结合数量
    新秀学习SSH(十四)——Spring集装箱AOP其原理——动态代理
    中国是大数据的人工智能的发源地
    采用shell脚本统计代码的行数
  • 原文地址:https://www.cnblogs.com/localhost-ha/p/12436175.html
Copyright © 2020-2023  润新知