• flask项目请求与响应


    项目名:

    static (静态) js css
    templates (模板)
    app.py (运行)

    web项目
    mvc:

    model 模型
    view 视图
    controller 控制器
    在这里插入图片描述

    mtv

    model (模型)
    templates (模板) --> html
    view 视图 (python代码) 起控制作用

    b/s browser server 浏览器服务器

    c/s client server 客户端服务器

    flask 的第一个程序

    from flask import Flask
    
    app = Flask(__name__)
    # 装饰器
    @app.route('/')   # 路由
    def hello_world():   # 视图函数  mtv:view 视图函数
        return "hello world"
    if __name__ == '__main__':
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    * Serving Flask app 'app'
     * Debug mode: off
    WARNING: This is a development server. Do not use it in a production deployment. 
    Use a production WSGI server instead.
     * Running on http://127.0.0.1:5000
    Press CTRL+C to quit
    127.0.0.1 - - [17/Oct/2022 15:39:44] "GET / HTTP/1.1" 200 -
    127.0.0.1 - - [17/Oct/2022 15:39:45] "GET /favicon.ico HTTP/1.1" 404 -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    什么是WSGI

    web服务器网关接口,python web server gateway interface
    是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的接口。
    在这里插入图片描述

    run函数参数

    host,port
    可以自定义ip地址和端口号
    app.run(host='ip地址',port='端口号')
    
    • 1
    • 2

    注意:如果host改成:0.0.0.0 统一局域网可以访问,如果放在服务器上则外网可以访问。

    debug

    在浏览器实时查看代码修改的内容,重新加载最新的代码,如果值是True的话。 (默认是false)
    debug是bool类型,叫做开启了调试模式,适用于开发环境 dev

    app.run(debug=True)
    
    • 1

    配置文件

    app.config()  
    
    • 1
    {'ENV': 'production',
     'DEBUG': False,
     'TESTING': False,
     'PROPAGATE_EXCEPTIONS': None,
     'SECRET_KEY': None,
     'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31),
     'USE_X_SENDFILE': False,
     'SERVER_NAME': None,
     'APPLICATION_ROOT': '/',
     'SESSION_COOKIE_NAME': 'session',
     'SESSION_COOKIE_DOMAIN': None,
     'SESSION_COOKIE_PATH': None,
     'SESSION_COOKIE_HTTPONLY': True,
     'SESSION_COOKIE_SECURE': False, 
     'SESSION_COOKIE_SAMESITE': None,
     'SESSION_REFRESH_EACH_REQUEST': True,
     'MAX_CONTENT_LENGTH': None,
     'SEND_FILE_MAX_AGE_DEFAULT': None,
     'TRAP_BAD_REQUEST_ERRORS': None,
     'TRAP_HTTP_EXCEPTIONS': False,
     'EXPLAIN_TEMPLATE_LOADING': False,
     'PREFERRED_URL_SCHEME': 'http',
     'JSON_AS_ASCII': None,
     'JSON_SORT_KEYS': None,
     'JSONIFY_PRETTYPRINT_REGULAR': None,
     'JSONIFY_MIMETYPE': None,
     'TEMPLATES_AUTO_RELOAD': None,
     'MAX_COOKIE_SIZE': 4093}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    可以看到结果是一个字典类型,可以通过‘ENV’字段修改环境

    app.config['ENV'] = 'deveploment'
    app.config['DEBUG'] = True
    
    • 1
    • 2
    编写配置文件

    创建一个配置文件settings.py

    # 配置文件
    ENV = 'development'
    debug = True
    
    • 1
    • 2
    • 3

    在使用环境的时候

    from flask import Flask
    import settings
    
    app = Flask(__name__)
    app.config.from_object(settings)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    return的返回对象

    from flask import Flask, Response
    
    @app.route("/index1")
    def index1():
        return '

    北京

    ' # 这种方式返回字符串,其实也相当于做了一个response对象的封装,最终返回的结果还是response对象 @app.route("/index2") def index2(): return ("beijing","shanghai","shenzhen") @app.route("/index3") def index3(): return Response("这是一个response对象")
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    注意:当返回的是元组的时候会有问题。

    @app.route("/index2")
    def index2():
        return "sorry! the file is not found!", 404
    # 元组需要传两个值,默认会把这种情况当做元组。  后面的状态码是响应行中的状态码
    
    • 1
    • 2
    • 3
    • 4
    还有一种可以自定义响应头部信息的方法:
    from flask import Flask, Response, make_response
    
    
    @app.route("/index4")
    def index4():
        s = """
        定制响应头
        
        """
        response = make_response(s)
        response.headers["mytest"] = "123abc"
        return response
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    request 对象

    from flask import Flask, request
    import setting
    
    
    app = Flask(__name__)
    app.config.from_object(setting)
    
    @app.route("/index")
    def index():
        print(request.headers)   # request对象访问对象属性
        print(request.path)
        print(request.base_url)
        print(request.url)
        return "app"
    
    if __name__ == '__main__':
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    3.vue知识点v-slot(插槽)
    一文让你彻底搞懂AQS(通俗易懂的AQS)
    Redis 只会用缓存?20种妙用让同事直呼牛X(荣耀典藏版)
    【踩坑】Android 编译线程爆了, gradle 内存 OOM 解决之路
    【JAVA高级】——Druid连接池和Apache的DBUtils使用
    在清凉客厅,和飞利浦Fidelio B95家庭影院一起感受炙热好声音
    Android 使用adb操作WiFi相关指令
    叉车数字化安全管理平台,安全管控升级,打造智慧监管新模式
    Linux中的防火墙(粗糙版)
    操作系统的运行机制
  • 原文地址:https://blog.csdn.net/a1137588003/article/details/132840727