第一个Flask程序

第一个Flask程序

# coding:utf-8
from flask import Flask

# 创建flask的应用对象
app = Flask(__name__)

@app.route("/")
def index():
    return 'hello'

if __name__ == "__main__":
    ''''''
    app.run()
F:\PythonBegin\flaskVir>python hello.py

4.1 Flask创建app对象

4.1.1 初始化参数

import_name:

static_url_path: 访问静态资源的URL前缀,默认是static

    例:http://127.0.0.1:5000/static/hello.html 

  app = Flask(__name__,
static_folder='static',
static_path='python',
template_folder='templates')

    访问时为:http://127.0.0.1:5000/python/hello.html

static_folder: 默认‘static’

template_folder: 默认‘templates’

4.1.2 配置参数

1.使用配置文件

DEBUG = True  -----> config.cfg

app.config.from_pyfile(“config.cfg”) 或 app.config.from_object()

 2.使用类对象 配置参数

class Config(object):

  DEBUG = True

  ITCAST = "python"

app.config.from_pyfile(Config)

 3.直接操作config字典对象

app.config('DEBUG') = True

4.视图中使用配置参数,两种方式

class Config(object):
    DEBUG = True
    ITCAST = "python"
@app.route("/")
def index():
    """定义的视图函数"""
    # a = 1 / 0
    # 读取配置参数
    # 1. 直接从全局对象app的config字典中取值
    # print(app.config.get("ITCAST"))
    # 2. 通过current_app获取参数
    print(current_app.config.get("ITCAST"))

5.app.run的使用

if __name__ == '__main__':
# 启动flask程序
# app.run()
  app.run(host="0.0.0.0", port=5000, debug=True)

4.2 路由

 

4.2.1 app.url_map 查看所有路由

if __name__ == '__main__':

    # 通过url_map可以查看整个flask中的路由信息

    print(app.url_map)

    # 启动flask程序

    app.run(debug=True)

 

4.2.2 同一路由装饰多个视图函数

路径和请求方式一样时,会先匹配第一个,

当请求方式不一样时,会按请求方式寻找路径

@app.route("/hello", methods=["POST"])

def hello():

    return "hello 1"

 

@app.route("/hello", methods=["GET"])

def hello2():

    return "hello 2"

 

4.2.3 同一视图多个路由装饰器

@app.route("/hi1")

@app.route("/hi2")

def hi():

    return "hi page"

 

4.2.4 利用methods限制访问方式

@app.route('/sample', methods=['GET', 'POST'])

 

4.2.5 使用url_for进行反解析

from flask import Flask, current_app, redirect, url_for

 

@app.route("/index")

def index():

    """定义的视图函数"""

    return "hello flask"

 

@app.route("/login")

def login():

    # url = "/"

    # 使用url_for的函数,通过视图函数的名字找到视图对应的url路径

    url = url_for("index")

 

    return redirect(url)

 

4.2.5 动态路由

# 转换器
# 127.0.0.1:5000/goods/123
# @app.route("/goods/<int:goods_id>")
@app.route("/goods/<goods_id>")  # 不加转换器类型, 默认是普通字符串规则(除了/的字符)
def goods_detail(goods_id):
    """定义的视图函数"""
    return "goods detail page %s" % goods_id

4.2.5 自定义转换器

from flask import Flask
from werkzeug.routing import BaseConverter

# 1. 定义自己的转换器
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(r"[a-z]{3}"):id>')
def hello_itcast(id):
return 'hello %s' %id


from flask import Flask
from werkzeug.routing import BaseConverter

# 1. 定义自己的转换器
class MobileConverter(BaseConverter):
    def __init__(self, url_map):
        super(MobileConverter, self).__init__(url_map)
        self.regex = r'1[34578]\d{9}'

# 2. 将自定义的转换器添加到flask的应用中
app.url_map.converters["re"] = RegexConverter
app.url_map.converters["mobile"] = MobileConverter

# 127.0.0.1:5000/send/18612345678
#@app.route("/send/<re(r'1[34578]\d{9}'):mobile_num>") 还可以定义这样的路由
@app.route("/send/<mobile:mobile_num>")
def send_sms(mobile_num):
return "send sms to %s" % mobile_num

转换器进阶:

from werkzeug.routing import BaseConverter #BaseConverter中有两个方法to_python,to_url

class RegexConverter(BaseConverter):
    """"""
    def __init__(self, url_map, regex):
        # 调用父类的初始化方法
        super(RegexConverter, self).__init__(url_map)
        # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
        self.regex = regex

    def to_python(self, value):
        """"""
        print("to_python方法被调用")
        # return "abc"
        # value是在路径进行正则表达式匹配的时候提取的参数
        return value

    def to_url(self, value):
        """使用url_for的方法的时候被调用"""
        print("to_url方法被调用")
        # return "15811111111"
        return value

@app.route("/send/<re(r'1[34578]\d{9}'):mobile_num>")
def send_sms(mobile_num):
    return "send sms to %s" % mobile_num

@app.route("/index")
def index():
    url = url_for("send_sms", mobile_num="18922222222")
    # /send/18922222222
    return redirect(url)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值