• Flask学习 url和视图


    因为扫描器的准备使用Flask框架,所以开始恶补Flask和前后端的知识

    Flask是一个使用Python编写的轻量级Web应用框架,作者是 Armin Ronacher(他也是 Werkzeug 及 Jinja2 的作者。)。本来只是作者的一个愚人节玩笑,不过后来大受欢迎,进而成为一个正式的项目。

    我们使用pip来安装flask

    pip install flask
    

      因为我python2和python3共存,所以这里我是pip3 install flask,都差不多

    因为flask的版本更新迭代比较快,可能会有两个项目分别基于不同的flask版本开发的,如果想要两个项目都能正常运行,可以使用python的虚拟环境来解决这个问题。

    暂时我还没有遇到这个问题,所以没有使用虚拟环境。

    第一个Flask程序

    from flask import Flask
    
    app=Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return "hello world!"
    
    if __name__=='__main__':
        app.run()  

    这里的

    from flask import Flask
    

      是从flask框架中导入Flask这个类

    接着我们需要初始化一个Flask对象,即初始化为app。

    传递__name__参数的好处有:

      1,方便flask框架去寻找资源

      2,方便flask插件比如Flask-Sqlalchemy出现错误的时候,好去寻找问题所在的位置

    @app.route是一个装饰器,以@开头,并且在函数的上面,作用是做一个url与视图函数的映射

    比如说在上面的第一个flask代码里面,hello_world就是这个视图函数,因为是@app.route('/'),所以url代表的就是127.0.0.1:5000/

    app.run()即启动一个应用服务器,一直监听本地的5000端口,来接收用户的请求。

    这时候因为默认是127.0.0.1:5000开启服务,我们访问一下,可以看到页面上已经输出了hello world!

    但是如果我们修改return 的值时,比如:

    @app.route('/')
    def hello_world():
        return "baidu.com"
    

      刷新127.0.0.1:5000页面,显示的还是之前的hello world!

     也就是说我们修改的文件并没有即时地反馈在网页上,需要我们重启服务才可以生效

     这里需要引入的就是debug模式,我们开启debug模式:

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

      这时候在代码里面进行修改并保存了之后,在debug模式为True的情况下,不需要重启服务,在检测到代码被修改之后,应用服务器就会自动重启服务,方便我们进行调试,除此之外,在代码中出错,debug模式下也会将相应的错误信息显示在网页上,在我们开发的过程中很方便,但服务上线了之后就应当将debug服务关闭,避免详细的错误信息暴露服务器的配置情况。

    更好的方式是我们将debug=True写在配置文件中,新建config.py,在里面写入

    DEBUG=True

      同时在主app文件中导入这个文件,并且配置到Flask实例化对象app中

    import config
    app.config.from_object(config)
    

      另外后面我们用到很多参数,也都可以放在config.py文件中统一配置,比如SECRET_KEY和SQLALCHEMY等等。

    在网页的浏览中,我们常常会传入参数对网页进行访问,比如/page/1,是网站文章的第一页,/page/2/,是网站文章的第二页,修改/page/后面的数字,访问到网站不同的页面,就需要用到url传参。

    参数的作用已经很明显了,可以在相同的url,指定不同的参数来加载不同的数据

    使用参数的方法:

    @app.route('/page/<id>')
    def page(id):
        return "你访问的参数是"+id
    

      

    很多时候我们会用到反转URL,反转URL即从视图函数到url的转换,其作用是:

      1,在页面重定向的时候,会使用url反转

      2,在模板中,也会使用url反转

    比如说我们在登录了网站之后,网站会自动重定向我们到网站的主页,就会使用到url反转,使用方法:

    首先需要导入url_for

    from flask import url_for
    

      然后使用url_for函数,就能够获取到视图函数所对应的url

    @app.route('/page/')
    def page():
        return url_for('page')
    

      这里可以看到页面上返回了/page/即访问的page函数的url

    获取到了反转之后的url,我们就会想到重定向到该url。

    我们需要导入redirect和url_for

    from flask import url_for
    from flask import  redirect
    

      我们这里令其访问/的时候跳转到登录界面

    @app.route('/')
    def hello_world():
        login_url=url_for('login')
        return redirect(login_url)
        return "google.com"
    

      先使用url_for函数将视图函数反转成url,然后使用redirect重定向到该url去

  • 相关阅读:
    泛型的内部原理:类型擦除以及类型擦除带来的问题
    内部类访问局部变量的时候,为什么变量必须加上final修饰
    Web 测试经验总结
    故障测试
    智能硬件产品的测试经验总结
    web端测试和移动端测试的区别小记
    MVC模式介绍
    重定向与转发
    MySQL权限管理分配
    pt-heartbeat工具监控MySQL复制延迟
  • 原文地址:https://www.cnblogs.com/Cl0ud/p/12574555.html
Copyright © 2020-2023  润新知