Flask从入门到入土:(一)环境及路由

首先简单介绍下Flask,它是一个轻量级的web应用框架。相比于Django框架来说,非常小巧灵活,耦合性低,可以写多个插件。FLask虽轻,但Flask非常强,它具有内核和扩展的特点,让FLask 拥有“快速”开发各种类型应用的能力!关于更多Flask介绍,可以看官方文档的介绍。
关于Django框架,后续也会持续推出Django相关的知识!
注:本专栏适合对Python有一定基础的同学,基础知识在文中不一一描述,感谢理解。

一、环境部署

如果你的pycharm是专业版,那么可以直接新建Flask项目,一键新建,两分钟等待,新建完成后项目安装的包也都帮你安装好了。
在这里插入图片描述
app.py模块也建成一个hello_world的最简单的项目。

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

终端敲flask run,即可运行app.
如果是社区版,可以手动新建py项目,安装Flask包,新建app.py文件,输入上述代码。直接终端运行,就可以了。
这里需要区分的是开发环境和生产环境。专业版的直接是开发环境和debug模块。社区版的是生产环境且debug模式是关闭的,如果需要切换,终端命令行输入set FLASK_ENV=development,就能切换到开发环境。如果你想切换debug模式,可以在插入一段

if __name__ == '__main__':
    app.debug = True    # 设置debug模式
    app.run()

或者

if __name__ == '__main__':
    app.run(debug=True)

二、路由

1. 注册路由

注册路由有两种

@app.route

如上述的,访问地址通过添加装饰器@app.route来实现,一般都是这么用

add_url_rule

参看源码看源码里我加的注释,其实就是@app.route来调用add_url_rule()方法的。

    def route(self, rule: str, **options: t.Any) -> t.Callable:
        """Decorate a view function to register it with the given URL
        rule and options. Calls :meth:`add_url_rule`, which has more
        details about the implementation.

        .. code-block:: python

            @app.route("/")
            def index():
                return "Hello, World!"

        See :ref:`url-route-registrations`.

        The endpoint name for the route defaults to the name of the view
        function if the ``endpoint`` parameter isn't passed.

        The ``methods`` parameter defaults to ``["GET"]``. ``HEAD`` and
        ``OPTIONS`` are added automatically.

        :param rule: The URL rule string.
        :param options: Extra options passed to the
            :class:`~werkzeug.routing.Rule` object.
        """

        def decorator(f: t.Callable) -> t.Callable:
            endpoint = options.pop("endpoint", None)
            # 这是route就是一个装饰器,它调用了add_url_rule方法。
            self.add_url_rule(rule, endpoint, f, **options)
            return f

        return decorator

具体实现如下:

def hello_world():
    return "hello world!"

app.add_url_rule('/hello_world', view_func=hello_world)

2.url

变量的传递

url变量的数据类型可以有多种,int,string,float,path,uuid这里我用string类型在举例,其他的,小伙伴可以试试
那么废话不多说,show my code!

@app.route('/common/<string:route>', endpoint="newroute", methods=["GET", "POST"])
def api(route):
    if route == "querystring":
        return f"如果route是querystring,那就返回。"
    url = url_for("newroute", route=route)
    return f"浏览器传过来的变量是{route},url是{url}"

这里我们可以把url的某一部分替换成string:route,可以在url里加入变量,并且用了转换器string:,这个变量就可以理解为它是一个关键字参数,这个参数把它传给了api函数,告诉api,我给你api传了一个string类型的关键字参数,你后面调用它只能是string类型的。

url_for(),endpoint,methods

url_for()是一种反向机制。通过浏览器请求,反向获取视图函数的url地址。
url_for反转函数的好处有很多,这里我觉得非常好用的是你可以只在一个地方改变url,而不用在项目工程里到处找。如果我的应用是放在url根路径之外的地方,那么url_for()能够帮我巧妙处理。

@app.route('/common/<string:route>', endpoint="newroute", methods=["GET", "POST"])
def api(route):
    if route == "querystring":
        return f"如果route是querystring,那就返回。"
    url = url_for("newroute", route=route)
    return f"浏览器传过来的变量是{route},url是{url}"

with app.test_request_context():
    print(url_for('newroute', route='username'))

在这里插入图片描述
另外这里的endpoint就是一个别名,传给api后,如果用到url_for()反向获取url,需要调用它的endpoint,如果没有设置endpoint,那么就调用之前的route。
如果需要给你的接口定义接口方法,加入methods参数既可。如上图,我加上了methods=[“GET”,“POST”],调用的时候分别用get,post都能成功调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值