• 技术文章 >Python框架 >Flask

    flask框架要学多久

    silencementsilencement2019-07-27 10:51:11原创7153

    相信学过Python的小伙伴,肯定都知道Flask这个web开发框架,但是并不是所有人都了解它,下面说一说Flask这个框架该怎么学,要学多久才能掌握。

    首先,什么是Flask

    Flask是一个基于Python并且依赖于Jinja2模板引擎和Werkzeug WSGI服务的一个微型框架

    Flask中包含一个轻量级的web 服务器主要用于在开发阶段测试使用

    Falsk使用MTV框架模式

    MTV框架模式

    M : Models , 模型层 , 主要负责根据数据库建模

    T : Templates , 模板层 ,处理用户的显示的内容的,如:html

    V : Views ,视图 , 处理与用户交互的内容(请求和响应)

    下面我们从Templates、Views和Models这三个部分来了解下Flask框架

    Templates

    Templates这部分主要讲解以下几个部分:

    过滤器

    1

    2

    3

    4

    5

    6

    7

    8

    9

    语法:

    {{变量|过滤器}}

     

    Jinja2模板中常用的过滤器有:

    capitalize     首字符变大写,其他字符变小写

    lower          将值转换为小写字符

    upper          将值转换为大写字符

    title          将值中的每个单词的首字符变大写

    trim           去掉值两端的空格

    标签(for循环遍历可迭代对象)

    1

    2

    3

    4

    5

    6

    7

    {% for 变量 in 列表|元组|字典 %}

    {% endfor %}

    for标签中的内置对象loop

    loop.index 获取下标

    loop.index0 从0开始的下标

    loop.first True/False

    loop.last  True/False

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    下面是一个关于Flask中宏的用法的实例:

    <!-- 声明宏:接收一个字符串作为参数,将参数放p中打印输出 -->

    {% macro showP(str) %}

        <h3>使用宏显示的内容:</h3>

        <p>{{str}}</p>

    {% endmacro %}

     

    <!-- 使用宏 -->

    <div>

        {% for name in params.list %}

            {{showP(name)}}

        {% endfor %}

    </div>

    <!-- 引入外部的宏 -->

    {% import 'macros.html' as ms %}

    {% for name in params.list %}

        {{ms.show_p(name)}}

    {% endfor %}

    继承

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    父模板中:

    {% block title %}

        父模板中的内容

    {% endblock %}

     

    子模板中:

    {% extends '父模板.html' %}

    {% block title %}

        子模板中的内容

    {% endblock %}

     

    子模板中的内容会覆盖父模板中的内容

    自定义404/500等错误页面

    1

    2

    3

    4

    5

    6

    7

    8

    9

    1.404 的错误处理

        @app.errorhandler(404)

        def page_not_fount(e):

            return render_template('404.html'),404

    2.500 的错误处理

        @app.errorhandler(500)

        def internal_server_error(500):

            return render_template('500.html'),500

    404.html 和 500.html 需要自定义

    Views

    Views这部分主要讲解以下几个部分:

    路由

    请求方法

    url反向解析

    request对象

    响应response

    文件上传

    cookies

    session

    路由

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    一:基本路由的配置:

    #http://127.0.0.1:5000/

    @app.route('/')

    def index():

        return "xxx"

     

    二:带参数路由的配置:

    1.基本带参数的路由

    @app.route('/show/<name>')

    def show1(name):

        name:表示的就是地址栏上传递的数据

        pass

    2.指定参数类型的路由

    @app.route('/show/<name>/<int:age>')

    def show(name,age):

        name : 字符串

        age : 整数

    可选的参数类型为 int float path(字符串,可以有斜杠/)

     

    三:多个路由的配置:

    @app.route('/地址1')

    @app.route('/地址2')

    ....

    def index():

        pass

    请求方法

    在Flask中默认只能接收get请求,post请求无法接收,但是可以手动设置请求的接收方式。

    1

    2

    3

    4

    下面的函数既能接收get请求又能接收post请求

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

    def  xxx():

        pass

    文件上传

    html文件:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    <form action="/01-file" method="post" enctype="multipart/form-data">

        <p>

            用户姓名: <input type="text" name="uname">

        </p>

        <p>

            用户图像: <input type="file" name="uimg">

        </p>

        <p>

            <input type="submit" value="提交">

        </p>

    </form>

    后台代码

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    @app.route('/01-file',methods=['GET','POST'])

    def file_views():

        if request.method == 'GET':

            return render_template('01-file.html')

        else:

            #处理的上传的文件

            #1.得到上传的文件

            f = request.files['uimg']

            #2.将文件保存进指定的目录处[相对路径]

            # print('文件名称:'+f.filename)

            # f.save('static/'+f.filename)

     

            #3.将文件保存进指定的目录处[绝对路径]

            #获取当前文件的所在目录名

            basedir = os.path.dirname(__file__)

            #print('当前文件所在目录的绝对路径:'+basedir)

            #获取当前的时间拼成字符串,再拼上扩展名

            ftime=datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")

            #获取文件的扩展名 (b04.jpg)

            ext = f.filename.split('.')[1]

            filename = ftime + "." + ext

            upload_path = os.path.join(basedir,'static/upload',filename)

            # print('完整的上传路径:'+upload_path)

            f.save(upload_path)

            return "Save OK"

    cookies

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    增:

        resp=make_response('保存cookie成功')

        resp.set_cookie('uname','test',3600)

    删:

        响应对象.delete_cookie('key')

    查询:

        uname = request.cookies.get('key')

        request.cookies['key']

        request.cookies   # 拿到所有的cookies

        if 'key' in request.cookies:

            pass

    session

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    from flask import session

    配置 SECRET_KEY:

          app.config['SECRET_KEY']="thisisarandomstring"

    增:

        session['key'] = value

    删:

        del session['key']

    查:

        value = session['key']

        value = session.get('key')

    专题推荐:flask
    上一篇:flask怎么实现多图上传 下一篇:flask表单怎么添加多个按钮

    相关文章推荐

    • Flask的URL传参方式有哪些• flask多线程模式

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网