zoukankan      html  css  js  c++  java
  • Flask-1-快速开始

    一、创建应用

    安装:pip install flask

    from flask import Flask
    
    # 需要文件名关键字参数,可以是__name__,也可以是任意模块名称
    app = Flask(__name__)
    
    # flask自带的服务器,运行run方法即可
    # 主要用于开发,调试用,正式不会使用app.run
    # 调试中可以开启debug
    app.run(debug=True)
    
    

    name的作用

    主要是用来确定用的应用的位置,进而找到其他的文件位置,比如静态资源文件,和html文件

    此时我们运行开启服务器,去访问,会报错404
    因为我们还没有添加路由。

    二、定义路由

    @app.route("/")
    def index():
        return "欢迎访问首页"
    

    此时我们在访问localhost:5000时,前端就能拿到我们返回的 "欢迎访问首页"了

    处理URL和函数之间的绑定关系的程序就叫路由。二者缺一不可,可以理解为:URL+视图函数=路由

    三、请求

    前端游览器通过,访问对应的ip、port、interface、就是发送一个get请求,到我们服务器上。

    我们如何获取请求数据呢,我们做最小原型的时候,说了服务器和应用程序传递信息是通过env环境变量,而flask帮我们把我们需要用的数据都帮我们封装到了request对象里面,基于Request类实现的。

    后面在详细介绍请求的方法,和获取请求参数,以及处理请求参数

    四、响应

    参考我们之前说的最小原型,falsk一样可以返回对应不同类型的响应结果。

    • string
    • html
    • json
    # 返回html页面,返回html代码即可,
    # 默认content-type为:text/html
    @app.route("/index")
    def index():
        return "<p style='color: red'>HTMl页面返回</p>"
    

    # 返回json格式数据,和最小原型定义在列表里的元祖里不一样
    # falsk帮我做了处理,header定义程字典即可。
    @app.route("/home")
    def home():
        return json.dumps({"msg": "home页面访问成功"}), {"content-type": "application/json"}
    

    备注:这个只是简单处理方式,不管是html,还是json,falsk都帮我们封装了方法。分别对应render_template
    、jsonify。

    1、render_template("index.html")

    # 直接render_templat方法传html文件名即可
    # html页面需要保存在templates目录下,默认就是这个目录名
    # 这个是初始化Flask核心对象的时候template_folder定义的
    # 默认就是templates,当然我们可以初始化的时候自定义
    
    app = Flask(__name__,template_folder="templates")
    
    @app.route("/index")
    def index():
        return render_template("index.html")
    

    2、jsonify({"msg":"josn"})

    # 使用jsonify方法,
    # 1、不需要在定义content-type
    # 2、不在需要json.dumps
    @app.route("/home")
    def home():
        return jsonify({"msg":"jsonify定义json格式"})
    
    

    我们先简单有个印象即可,后续在单独分享falsk如何构造响应对象的,包括返回数据、状态码,请求头等,主要是封装了make_response方法,基于Response类实现的

    五、Falsk核心类初始化参数说明

    class Flask(_PackageBoundObject)    
        def __init__(
                self,
                import_name,  # 此应用程序所属的包或模块的名称
                static_url_path=None,  # 静态文件的访问路径, 就相当于别名, 前端访问后端静态资源时,url开头就是这里指定的路径,默认是static
                static_folder='static',  # 静态文件保存目录的路径,必须在这个指定的参数目录下 默认当前项目中的static目录
                static_host=None,  # 远程静态文件所用的Host地址, 如CDN的主机地址
                host_matching=False,  # 是否开启host主机位匹配,是要与static_host一起使用,如果配置了static_host, 则必须赋值为True
                subdomain_matching=False,  # 理论上来说是用来限制SERVER_NAME子域名的,但是目前还没有感觉出来区别在哪里
                template_folder='templates',  # HTML模板目录, 默认当前项目中的 templates 目录
                instance_path=None,  # 指向另一个Flask实例的路径
                instance_relative_config=False,  # 是否加载另一个实例的配置
                root_path=None  # 主模块所在的目录的绝对路径,默认项目目录
                )
           
    

    我们只需要重点关注下面几个即可

    • template_folder='templates':HTMl文件需要保存的目录文件名
    • static_url_path=None, 客户端访问静态资源的url,默认是static
    • static_folder='static', 本地静态资源保存目录的文件名

    六、运行服务器的方式

    • python形式:app.run()
      • debug :开启debug模式,自动重启服务器,报错信息可以展示在前端,通过前端可以快读定位问题
      • host:访问ip地址,默认localhost
      • port:访问的端口,默认5000
    • flask:命令行进入app py文件路径,输入flask查看使用
      • set FLASK_APP=Flask_app.py
      • flask run
      • 其他参数配置,flask run -help

    七、MVC

    我们在开发一个项目的时候,总不能把所有逻辑都写在app.py文中的,这个文件只要负责开启一个服务器,也就主入口,其他的逻辑需要我们分层处理,而现在主流分层一般都是基于MVC模式的

    1、组成

    • model:数据相关逻辑,封装处理数据相关逻辑
    • view:处理返回到前端的内容,可以说是HTMl。
    • control:控制器,视图函数
      • 接收请求参数
      • 调用对应的函数(一般在model层定义的)
      • 构建响应结果

    2、优点

    • 有条不素,职责分明
    • 各自独立,互相复用
    • 灵活性,换用其他的数据库,不会影响其他代码

    八、配置项:config

    host和port都可以在run里指定 ,但是他们也可以通过配置文件的形式来修改

    app有很多配置像都可以通过config添加配置,基于Config类实现的

    配置文件的必要性

    我们线上部署前,debug肯定是需要关掉的,port也可能会修改,我们通过配置文件的话就非常的灵活,不同的环境使用不同的配置文件就可以了

    通过app.config来设置添加配置非常灵活

    from_object:可以是基于类的方式,一个类属性就是一个配置项

    from_pyfile:可以基于py文件

    from_json:可以是基于json文件

    # 设置debug模式
    app.config["DEBUG"] = True
    # 控制文件大小
    app.config["MAX_CONTENT_LENGTH"] = 2 * 1024 * 1024
    # 设置SECRET_KEY ,比如表单验证是必须的配置,后面讲表单验证的时候在分析作用
    app.config["SECRET_KEY"]
    
  • 相关阅读:
    软件设计原则
    UML 类图
    Lambda 四大内置核心函数式接口
    Lambda 表达式简介
    vuex源码解析及简单实现
    websocket
    module.export / require 和 export / import
    关于form表单提交时required属性失效的问题
    更改mysql引擎后无法建立外键(navicat)
    关于Android studio SDK的安装与配置
  • 原文地址:https://www.cnblogs.com/jiangmingbai/p/13081070.html
Copyright © 2011-2022 走看看