公众号:uncle39py

V1

2022/01/24阅读:73主题:默认主题

Flask01 最小模型+路由

01、web框架

此处有张图片,很浓缩,请移步公众号uncle39py观看

Django:重量级框架,除了实现web框架的核心功能:路由+视图,还配套了许多额外的功能:比如ORM等,这些组件是耦合在一起的,一留全留一换全换。所以当一个项目只要实现当下的功能而无需考虑日后的扩展时可以用Django。 Flask:轻量级框架,只实现了web框架的核心功能(路由+视图)

02、Flask最小模型

from flask import Flask

# 1.创建flask的应用对象
app = Flask(__name__)
# __name__表示当前的模块名字,flask会将当前模块所在的目录作为整个工程的总目录
# 默认会以工程目录下的static作为静态文件目录,templates作为模板目录


@app.route('/') # 2.app对象里面的route装饰器 里面指定路由
def index():
    return 'hello'  # 3.直接返回响应体的字符串

if __name__ == '__main__':
    app.run()  # 4.启动flask程序,这是flask提供的服务器程序,仅用于测试
    #app.run(host='0.0.0.0',port=5000)
    #知道一下host这个参数的存在,当需要任意机子都可以访问时需要改成0.0.0.0

03、展开Flask最小模型

1、参数介绍

app = Flask(__name__)
# __name__:寻找静态目录与模版位置的参数
# 当一个模块是启动模块时,__name__是值是__main__;当一个模块被import时,此模块内的__name__的值是模块名字。 
# 当你称呼自己时都是“我”,当别人叫你时都是叫名字。


app = Flask(__name__,
            static_url_path='/python',      # 浏览器访问静态资源的url前缀,默认是static
            static_folder="static",         # 静态文件存放的目录,默认是static
            template_folder='templates')    # 模板文件的目录,默认是templates
# 静态目录还是static,但是浏览器中静态资源的url前缀变成了/python
# 区分静态文件目录和路由:只要发现url是/python前缀,flask就会去静态目录static下找资源而不会去路由匹配/python
# 此处/python需要加/,否则服务器程序跑不起来报错(别问我怎么知道~)

2、读取配置

#1、使用配置文件:项目根目录下新建config.cfg,写上第一个配置参数DEBUG = True
app.config.from_pyfile('config.cfg')

#2、使用对象配置。这种方式可以定义一个基类Config,以及生产环境和开发环境的子类,切换配置只需替换掉from_object参数
class Config(object):
    DEBUG = False
app.config.from_object(Config)

#3、将app.config理解成字典,可以从配置文件读配置,可以从对象读配置,也可以直接赋值
app.config['DEBUG'] = True

#4、有些自定义的配置并不是给flask去读取的,而是自己使用的,我们也可以把这样的配置写在app.config字典里面
#但在视图函数中读取配置的时候够不着app对象时,此时可以使用current_app
from flask import Flask,current_app
current_app.config.get('DEBUG')
#将current_app理解成app的全局代理人,跟app同等效力

3、路由

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


@app.route('/',methods=['post','get'])
#@app.route('/')指定路由时,默认只允许get方式访问对应视图函数
#可以通过methods参数限定访问方式,注意methods有s并且值是列表
#当两个视图函数用同样的路径时,可以通过methods限定一个视图函数通过get方式访问,另一个视图函数通过post方式访问
from flask import Flask,url_for

@app.route('/') 
def index():
    return 'index'
    
@app.route('/login')
def login():
    url = url_for('index')  
    #通过视图函数的名字index找到视图index对应的路径/(通过名字找到名字对应的路径)
    return redirect(url)

路由提取参数:

@app.route('/goods/<int:goods_id>')
def goods(goods_id):
    return 'goods_id is %s' %goods_id
#1、生成的路由是<Rule '/goods/<goods_id>' (OPTIONS, GET, HEAD) -> goods>
#2、会将浏览器中输入的路径http://127.0.0.1:5000/goods/123中的123赋给参数goods_id
#3、路由中的goods_id跟视图函数中的参数goods_id要对应上
#4、如果没有指定<int:...>,那么goods_id是str类型的。
#5、自定义转换器(后续在展开,先阐述整个flask框架)

分类:

后端

标签:

Python

作者介绍

公众号:uncle39py
V1