Flask的路由,视图和相关配置

第一个flask程序

from flask import Flask

Flask函数接收一个参数__name__,它会指向程序所在的包

app = Flask(__name__)
  • 装饰器的作用是将路由映射到视图函数 index,在程序运行过程中,程序实例中会使用 url_map 将装饰器路由和视图的对应关系保存起来
@app.route(‘/‘)
def index():
    return ‘Hello World‘
  • Flask应用程序实例的 run 方法 启动 WEB 服务器
if __name__ == ‘__main__‘:
    app.run()

相关配置参数

初始化参数

Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:

  • import_name

    • Flask程序所在的包(模块),传 __name__ 就可以
    • 其可以决定 Flask 在访问静态文件时查找的路径
  • static_path
    • 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
  • static_url_path
    • 静态文件访问路径,可以不传,默认为:/ + static_folder
  • static_folder
    • 静态文件存储的文件夹,可以不传,默认为 static
  • template_folder
    • 模板文件存储的文件夹,可以不传,默认为 templates

程序加载配置

在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:

  • 从配置对象中加载(常用)

    • app.config.form_object()
  • 从配置文件中加载
    • app.config.form_pyfile()
  • 从环境变量中加载(了解)
    • app.config.from_envvar()

以下演练以设置应用程序的 DEBUG(调试模式) 为例,设置应用为调式模式这后,可以实现以下功能:

  1. 程序代码修改后可以自动重启服务器
  2. 在服务器出现相关错误的时候可以直接将错误信息进行抛出到控制台打印

使用方式

配置对象

  • 从配置对象中加载,创建配置的类,代码如下:
# 配置对象,里面定义需要给 APP 添加的一系列配置
class Config(object):
    DEBUG = True

# 创建 Flask 类的对象,指向程序所在的包的名称
app = Flask(__name__)

# 从配置对象中加载配置
app.config.from_object(Config)

运行测试,在修改代码之后直接保存,会自动重启服务器

配置文件

  • 创建配置文件 config.ini,在配置文件中添加配置
  • 使用代码去加载配置
  • # 创建 Flask 类的对象,指向程序所在的包的名称
    app = Flask(__name__)
    
    # 从配置文件中加载配置
    app.config.from_pyfile(‘config.ini‘)

环境变量(了解)

在Edit Configrations配置相关的参数

  • 使用代码去加载配置
# 创建 Flask 类的对象,指向程序所在的包的名称
app = Flask(__name__)
# 加载指定环境变量名称所对应的相关配置
app.config.from_envvar(‘FLASKCONFIG‘)

读取配置

  • app.config.get()
  • 在视图函数中使用 current_app.config.get()

注:Flask 应用程序将一些常用的配置设置成了应用程序对象的属性,也可以通过属性直接设置/获取某些配置:app.debug = True

app.run的参数

  • 可以指定运行的主机IP地址,端口,是否开启调试模式

app.run(host="0.0.0.0", port=5000, debug = True)

指定路由地址

# 指定访问路径为 demo1
@app.route(‘/demo1‘)
def demo1():
    return ‘demo1‘

给路由传参示例

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

# 路由传递参数
@app.route(‘/user/<user_id>‘)
def user_info(user_id):
    return ‘hello %s‘ % user_id
  • 路由传递的参数默认当做 string 处理,也可以指定参数的类型
# 路由传递参数
@app.route(‘/user/<int:user_id>‘)
def user_info(user_id):
    return ‘hello %d‘ % user_id

这里指定int,尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数

指定请求方式

在 Flask 中,定义一个路由,默认的请求方式为:

  • GET
  • OPTIONS(自带)
  • HEAD(自带)

如果想添加请求方试,那么可以如下指定:

@app.route(‘/demo2‘, methods=[‘GET‘, ‘POST‘])
def demo2():
    # 直接从请求中取到请求方式并返回
    return request.method

Postman的使用:略.

视图常用逻辑

  • 返回 JSON
  • 重定向
    • url_for
  • 自定义状态码

返回JSON

在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应

# 返回JSON
@app.route(‘/demo4‘)
def demo4():
    json_dict = {
        "user_id": 10,
        "user_name": "laowang"
    }
    return jsonify(json_dict)

不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json

重定向

  • 重定向到 百度官网
# 重定向
@app.route(‘/demo5‘)
def demo5():
    return redirect(‘http://www.baidu.com‘)
  • 重定向到自己写的视图函数

    • 可以直接填写自己 url 路径
    • 也可以使用 url_for 生成指定视图函数所对应的 url

@app.route(‘/demo1‘)
def demo1():
    return ‘demo1‘

# 重定向
@app.route(‘/demo5‘)
def demo5():
    return redirect(url_for(‘demo1‘))
  • 重定向到带有参数的视图函数

    • 在 url_for 函数中传入参数
# 路由传递参数
@app.route(‘/user/<int:user_id>‘)
def user_info(user_id):
    return ‘hello %d‘ % user_id

# 重定向
@app.route(‘/demo5‘)
def demo5():
    # 使用 url_for 生成指定视图函数所对应的 url,注意url_for括号内要是字符串.
    return redirect(url_for(‘user_info‘, user_id=100))

自定义状态码

  • 在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666
@app.route(‘/demo6‘)
def demo6():
    return ‘状态码为 666‘, 666
 
 


原文地址:https://www.cnblogs.com/yinjiangchong/p/9260067.html

时间: 2024-08-18 14:22:17

Flask的路由,视图和相关配置的相关文章

UI第九讲.UITableView表视图创建,表视图的重用机制,表视图的相关配置方法

一.UITableView表视图创建 1>.基本属性: UITableView继承自UIScrollView,所以可以滚动          表视图的每一条数据都是显示在UITableViewCell对象中          表视图可以分区显示数据,每个分区称为一个section,每一行称为row,编号都是从0始 2>.重要用法: 最重要的是两个代理方法 <UITableViewDelegate,UITableViewDataSource>(其中必须实现的是 numberOfRow

Flask的路由解读以及其配置

from flask import Flask app =Flask(__name__) 一.配置 配置一共有四中方式 方法一: 只能设置以下两种属性 app.debug=True app.secret_key="asdas" 方法二 app.config["DEBUG"]=True 方法三 app.config.from_pyfile("配置文件路径") 配置文件 DEBUG=True 方法四(推荐使用) app.config.from_pyf

Laravel教程 二:路由,视图,控制器工作流程

Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel的神奇世界了,主要是讲解Laravel的Router,Views,Controllers的工作流程,目的也就是让大家明白Laravel在处理一个get请求的时候是如何工作的. 在开始之前,我们首先得将我们的服务器启动起来,如果你使用Laravel的artisan,你可以直接: p

Flask即插视图与tornado比较

由于公司使用了Tornado框架和Flask框架,之前一直使用的都是Flask框架,已经对url下面紧跟着视图的写法很固执.刚开始接触Tornado框架,对于其url和视图分开的写法思想上无法转变.今天看了Flask的源码和相关教程看到原来 Flask也可以写出和Tornado类似的代码结构--Flask即插视图. 代码如下: from functools import wraps from flask import Flask, request from flask.views import

Django -- 视图和URL配置

一个人行走的范围,就是他的世界:    -- 北岛<青灯> 一个人吟唱的语调,就是他的生活.    -- 小Q<小曲> ------------------------------------------------------------------------------------------------- 前一节我们建立了一个Django项目,这一节我们来了解视图和url的关系: [第一个视图 根目录] 当我们搭建好django时,urls.py内没有url,我们会看到一个

源码解析flask的路由系统

当我们新建一个flask项目时,pycharm通常已经为项目定义了一个基本路由 @app.route('/') def hello_world(): return 'Hello World!' 此时在浏览器中输入地址http://127.0.0.1:5000,页面会显示出"Hello World!"的字样 如下图所示 那么此时在flask后台程序中,到底发生了什么事情呢?? 在上面的例子中,可以看到对hello_world视图函数被app.route这个有参装假器装饰 来看下app.r

Flask最强攻略 - 跟DragonFire学Flask - 第七篇 Flask 中路由系统

Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST"]) 为什么要这么用?其中的工作原理我们知道多少? 请关注跟DragonFire学Flask 之 路由系统 ,这里有你想要的答案 1. @app.route() 装饰器中的参数 如果不明白装饰器 点击这里 methods : 当前 url 地址,允许访问的请求方式 @app.route("/inf

Tomcat是什么:Tomcat与Java技、Tomcat与Web应用以及Tomcat基本框架及相关配置

1.Tomcat是什么       Apache Tomcat是由Apache Software Foundation(ASF)开发的一个开源Java WEB应用服务器. 类似功能的还有:Jetty.Resin.Websphere.weblogic.JBoss.Glassfish.GonAS等,它们的市场占有率如下,可以看到Tomcat是最受欢迎的Java WEB应用服务器. Tomcat在技术实现上所处的位置如下: 下面我们来了解下Tomcat与这些技术之间的关系. 1-1.Tomcat与Ja

Andorid Studio 模块化开发相关配置

Andorid Studio 模块化开发相关配置 下面以宿主APP模块和Uer_Module模块为例: 第一步:在项目根目录gradle.properties配置文件中添加如下代码 isNeedUserModule=true #isNeedUserModule=false 第二步 在user_module中的build.gradle文件中加入了如下代码来控制此库是library还是APP: if (!isNeedUserModule.toBoolean()) { apply plugin: 'c