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"]
原文地址:https://www.cnblogs.com/jiangmingbai/p/13081070.html