美文网首页
2020-05-27--flask01--flask基础01

2020-05-27--flask01--flask基础01

作者: program_white | 来源:发表于2020-05-28 22:27 被阅读0次
    • flask框架概述
    • 虚拟环境的创建
    • pycharm创建flask项目
    • HelloWorld运行
    • (___name____)详解
    • 路由的使用
    • 终端(Terminal)的使用
    • 项目资源文件的配置
    • 程序加载配置
    • postman的使用

    flask框架概述

    Flask为Python属下的web框架之一,具有比Django更大的灵活性,而由于建立时间较晚,因此相较于Django在实际应用上略逊。但是Flask的强大在于其灵活性以及强可扩展性,这是Django所望尘莫及的。作为一个微框架,Flask的体量也相对于Django小,其在大型网站的应用暂时没有实际示例,而小型app则有很多,因此学好flask框架有利于接下来学习数据挖掘、TensorFlow、PyTorch等工具后将其落地。

    Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。

    Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。
    可以说Flask框架的核心就是Werkzeug和Jinja2。

    Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

    Flask的Github地址:https://github.com/pallets/flask
    Flask中文文档地址:http://docs.jinkan.org/docs/flask/

    创建虚拟环境

    与Django一样,flask也是可以在虚拟环境下进行创建的(这样的好处就是当项目的python版本不同时可以同时使用)

    因为在之前的django中已经在该python版本(3.7.7)安装了虚拟环境以及管理包,也就是:

    pip install virtualenv
    pip install virtualenvwrapper-win
    

    所以直接创建虚拟环境即可:

    mkvirtualenv -p python3 py_flask
    或
    mkvirtualenv flask_vir1   #在python下创建虚拟环境
    workon flask_vir1       #进入虚拟环境
    pip install flask      安装flask
    
    deactivate (虚拟环境名)         #退出当前的虚拟环境
    

    在cmd:


    pycharm创建项目

    在pycharm专业版中可以直接创建flask项目,并且省略大部分的配置。
    但是当使用pycharm社区版时,只能创建pure python项目。

    在这里使用pycharm创建pure python项目搭建flask项目:
    打开pycharm,创建pure python项目,选择已有的虚拟环境(刚在创建的虚拟环境):



    点击create

    HelloWorld

    创建成功后,就是一个空项目,什么都没有。
    如果使用pycharm专业版创建flask项目,那么会有好几个文件以及文件夹。
    在项目下创建python文件---HelloWorld.py
    要使用flask,就首先要导入flask框架中的Flask模块。
    HelloWorld.py:

    from flask import Flask
    
    #Flask接受一个参数__name__,他会指向程序所在的包
    app = Flask(__name__)
    
    #路由和函数
    @app.route('/')
    def index():
        return '头像真帅'
    
    #main函数
    if __name__ == '__main__':
        app.run()
    

    到这里就可以运行了:


    (___name____)详解

    main函数:

    if __name__ == '__main__':
    类似c或者Java中的mian函数,--程序的入口文件
    

    test1.py:

    def test_func():
        print(__name__)
    
    
    def test1_func(name):
        print(type(name), name)
    
    test_func()       #__main__
    test1_func(__name__)        #<class 'str'> __main__
    
    #在当前模块下运行,在test_func函数中打印__name__,这个__name__就是当前文件的__name__,所以打印__main__
    #在test1_func函数中,传入参数__name__,也是但当前文件的__name__,所以还是打印__main__
    

    name.py:

    # __name__是类属性,也就是静态属性
    
    from test1 import test1_func,test_func
    
    '''
    在当前模块运行时,__name__ 为__main__
    使用import导入时, __name__  为  所在的模块的文件名(去掉.py)
    '''
    
    test_func()     #test1
    test1_func(__name__)     #<class 'str'> __main__
    
    #import方式使用,test_func()打印的__name__,是test1文件下的__name__,所以打印test1。
    #test1_func()中,参数传递的是当前模块的__name__,所以打印__main__。
    

    到这里就知道了flask中

    app = Flask(__name__)
    和
    if __name__ == '__main__':
        app.run()
    #给Flask传递的参数__name__是当前模块的__name__,
    #那么__name__就是__main__,那么程序自然就运行到app.run()了。
    

    路由的使用

    在flask中也有类似于django的url路由,但是比django的简单很多,直接在相应的视图函数上加上一个装饰器即可:

    #装饰器的作用就是讲路由映射到相应的视图函数上
    @app.route('/')
    def index():
        return '头像真帅'
    

    终端(Terminal)的使用

    在flask中要进入python shell:

    flask shell
    

    但是前提是项目中必须有有app.py文件,并且要在app.py中写最基本的组成部分。


    项目资源文件的配置

    在Flask类中有许多的初始化参数:

    '''
    static_url_path:静态访问路径(可不传,默认为static)
    
    static_folder:静态文件夹(可不传,默认为static)
    
    template_folder:模板访问路径(可不传,默认为templates)
    
    '''
    

    static_url_path的设置:

    • 如果static_folder未被指定(也就是默认值static),那么static_url_path取为static
    • 如果static_folder被指定了,那么static_url_path等于static_folder的最后一级文件夹名称。
    • 手动指定static_url_path时,如果static_url_path不为空串,url的路径必须以/开头,如/static。
    • 手动指定static_url_path时,如果static_url_path为空串,url路径不必以/开头,否则相当于static_url_path=None的情况,也就是使用static_folder的目录名字。
    • static_url_path是前端访问资源文件的前缀目录。默认是/static,就是前端必须这样访问:<img src="/static/img/mylogo.jpg" />
      我们改成 ''",就可以这样访问了:<img src="/img/mylogo.jpg" />。就达到前端从根目录访问的目的了。
    • static_folder:
      static_folder表示静态文件所在路径,默认为总项目下的static文件夹
      后端存储资源文件的目录。默认是/static,就是指明你后端的资源文件,是放在<your project>/static/目录下,一般不需要改动。

    也就是说flask框架默认总项目下的static文件静态文件目录(static_folder),templates为 模板目录(template_folder)。以及前端访问静态资源时的url根路径(static_url_path)。
    实例:
    在项目中新建文件夹--static文件夹,在文件夹中新建index.html,然后运行项目:
    在url中访问:

    127.0.0.1:5000/static/index.html
    

    这就是因为static_url_path默认为static,所以可以访问到。

    程序加载配置

    在使用web框架时通常要配置很多的配置项,在flask中常用的有两种方式进行加载配置

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

    也就是通过对象进行配置,那么一定要创建类
    在app.py中,创建了app实例后,进行编写配置类:

    from flask import Flask
    
    #Flask接受一个参数__name__,他会指向程序所在的包
    app = Flask(__name__,static_folder='statics')
    
    #1. 配置对象,里边定义需要给APP添加的一系列配置
    class Config(object):
        DEBUG = True    #在修改代码之后直接保存,会自动重启服务器
    
    # 程序加载配置
    #1.从配置对象中加载,把类名传给参数
    app.config.from_object(Config)
    
    #装饰器的作用就是讲路由映射到相应的视图函数上
    @app.route('/')
    def index():
        return '头像真帅'
    
    #main函数
    if __name__ == '__main__':
        app.run()
    

    添加的DEBUG=True,在修改代码之后直接保存,会自动重启服务器,不需要像django重启服务器,还可以设置数据库等配置。
    运行:



    修改index函数的返回值:



    直接运行:

    2.配置文件中加载

    顾名思义:就是创建一个文件,用于写一些配置项。
    使用:
    在项目下新建文件config.ini,在该文件中写:

    #在此文件添加一些配置,一行一个
    DEBUG = True
    

    然后在app.py中使用:

    #2.配置文件中加载,把文件名传进去
    app.config.from_pyfile('config.ini')
    

    再次运行上一步中的结果,也是可以的。

    3.从环境变量中加载(不常用)

    app.run(参数)
    app.run(port=8000,debug=True)       #port:指定端口号,debug :自动保存,并重启服务
    
    • port:指定端口号
    • debug :自动保存,并重启服务
      运行:


    postman

    Postman是chrome的一款插件,也可以下载app使用,用于做接口请求测试,无论是前端,后台还是测试人员,都可以用postman来测试接口,用起来非常方便。
    就是模拟像后端服务器url发送请求,测试请求是否正常的。



    模拟项向

    [http://127.0.0.1:5001/](http://127.0.0.1:5001/)
    

    发送请求:



    上边的是请求方没有进行传参,当进行web开发时,要对后端不断地传递参数也就是位置参数。

    有参方式

    在app.py中编写服务器代码:

    @app.route('/user/<user_id>')
    def user_info(user_id):
        
        return f'hello{user_id}'
    

    使用postman进行测试:


    相关文章

      网友评论

          本文标题:2020-05-27--flask01--flask基础01

          本文链接:https://www.haomeiwen.com/subject/urrgahtx.html