zoukankan      html  css  js  c++  java
  • Flask之视图(一)

    2、关于Flask

    知识点

    • 从Hello World开始

      • 给路由传递参数
      • 返回状态码
      • 重定向
      • 正则URL
      • 设置cookie和获取cookie
    • 扩展

      • 上下文
      • 请求钩子
      • Flask装饰器路由的实现
      • Flask-Script命令行

    2.1 从 Hello World 开始

    Flask程序运行过程:

    所有Flask程序必须有一个程序实例。

    Flask调用视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。一般情况下,响应内容主要是字符串和状态码。

    当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。此时,Web服务器使用WSGI(Web Server Gateway Interface)协议,把来自客户端的所有请求都交给Flask程序实例。WSGI是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口,它封装了接受HTTP请求、解析HTTP请求、发送HTTP,响应等等的这些底层的代码和操作,使开发者可以高效的编写Web应用。

    程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。 在Flask程序中,路由的实现一般是通过程序实例的route装饰器实现。route装饰器内部会调用add_url_route()方法实现路由注册。

    调用视图函数,获取响应数据后,把数据传入HTML模板文件中,模板引擎负责渲染响应数据,然后由Flask返回响应数据给浏览器,最后浏览器处理返回的结果显示给客户端。

    示例:

    新建文件hello.py:

    # 导入Flask类
    from flask import Flask
    
    #Flask类接收一个参数__name__
    app = Flask(__name__)
    
    # 装饰器的作用是将路由映射到视图函数index
    @app.route('/')
    def index():
        return 'Hello World'
    
    # Flask应用程序实例的run方法启动WEB服务器
    if __name__ == '__main__':
        app.run()

    查看视图函数中的路由:

    给路由传参示例:

    有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数 来显示不同用户的个人信息。

    # 路由传递的参数默认当做string处理,这里指定int,尖括号中冒号后面的内容是动态的
    @app.route('/user/<int:id>')
    def hello_itcast(id):
        return 'hello itcast %d' %id

    返回状态码示例:

    return后面可以自主定义状态码(即使这个状态码不存在)。当客户端的请求已经处理完成,由视图函数决定返回给客户端一个状态码,告知客户端这次请求的处理结果。

    @app.route('/')
    def hello_itcast():
        return 'hello itcast',999

    abort函数:

    如果在视图函数执行过程中,出现了异常错误,我们可以使用abort函数立即终止视图函数的执行。通过abort函数,可以向前端返回一个http标准中存在的错误状态码,表示出现的错误信息。

    使用abort抛出一个http标准中不存在的自定义的状态码,没有实际意义。如果abort函数被触发,其后面的语句将不会执行。其类似于python中raise。

    from flask import Flask,abort
    @app.route('/')
    def hello_itcast():
        abort(404)
        return 'hello itcast',999

    捕获异常:

    在Flask中通过装饰器来实现捕获异常,errorhandler()接收的参数为异常状态码。视图函数的参数,返回的是错误信息。

    @app.errorhandler(404)
    def error(e):
        return '您请求的页面不存在了,请确认后再次访问!%s'%e

    重定向redirect示例

    from flask import redirect
    @app.route('/')
    def hello_itcast():
        return redirect('http://www.itcast.cn')

    正则URL示例:

    正则URL是为了匹配指定的URL,而匹配指定的URL则可以达到限制访问,以及优化访问路径的目的。

    from flask import Flask
    from werkzeug.routing import BaseConverter
    
    class Regex_url(BaseConverter):
        def __init__(self,url_map,*args):
            super(Regex_url,self).__init__(url_map)
            self.regex = args[0]
    
    app = Flask(__name__)
    app.url_map.converters['re'] = Regex_url
    
    @app.route('/user/<re("[a-z]{3}"):id>')
    def hello_itcast(id):
        return 'hello %s' %id

    设置cookie和获取cookie

    from flask import Flask,make_response
    @app.route('/cookie')
    def set_cookie():
        resp = make_response('this is to set cookie')
        resp.set_cookie('username', 'itcast')
        return resp

    from flask import Flask,request
    #获取cookie
    @app.route('/request')
    def resp_cookie():
        resp = request.cookies.get('username')
        return resp

  • 相关阅读:
    Android kotlin jsoup解析网页html代码
    Android kotlin 判断网络状态
    ASP.NET设计模式笔记1
    C# SMTP发送邮件
    SQL连接数和CPU使用情况查询
    Grafana笔记
    Docker笔记
    solidity学习(四)---storage和memory关键字
    e-book
    solidity学习(四)-- Require(), Assert(), Revert()的用法和区别
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/9545512.html
Copyright © 2011-2022 走看看