Flask Python Web框架(一)

一、框架的定义

1、框架是一个为了解决开放性问题而存在的一种程序结构,其本身提供了一些最基本的功能,使用
   者只需要在其基础上搭建自己的操作就可以了。

2、框架模式

     1、MTV      

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

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

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

      2、MVC

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

         V:View,视图,处理用户的显示内容

         C:Controler,控制器,用于与用户交互的部分内容(请求和响应)

二、Flask框架

 Flask框架是一种轻量级的 Python Web 框架。Flask基于python并且依赖于Jinja2模板引擎

 和Werkzeug WSGI服务的一个微型框架。

 WSGI:Web Server Gateway  Interface(WEB服务网管接口)

 1、Flask框架采用MTV的框架模式
 
 2、安装Flask

    查看已安装的Flask版本:

    在python交互模式中:import flask; 
                        flask.__version__;

    安装Flask:sudo pip3 install flask;

 3、路由 
           
      客户端发送请求给web服务器,web服务器再将请求发送给Flask程序实例

      Flask程序实例需要知道每个url请求所对应的运行代码是谁。所以程序中必须要创建一个

      url请求地址到python运行函数的一个映射。处理url和函数之间的关系的程序就是路由。

 4、  在Flask中,路由是通过@app.route装饰器表示。

      路由的基本表示

        @app.route('/')
        def index():
            return "xxx"
  
      
      基本带参的路由

        @app.route('/show/<name>')
        def show(name):
            name表示的是从地址栏上传来的数据
            return "xxx"
       
      带多个参数的路由
        http://localhost:5000/show/laowang/36

        @app.route('/show/<name>/<age>')
        def show(name,age):
            return "xxx"

      指定参数类型的路由
         @app.route('/show/<name>/<int:age>')
         def show(name,age):
             name:字符串
             age:整数

 5、多个URL的路由匹配

    为多个访问地址匹配同一个视图处理函数

    @app.route('/地址1')
    @app.route('/地址2')
      ...
    def index():
       return "xxx"


 6、路由中设置HTTP请求方法

    Flask路由也允许设置对应的请求方法(post/get),只有将匹配上请求方法的路径才能交给

    对应的视图处理函数去处理。所有的路由,默认只接受get请求。

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

     ** methods可以是GET,可以是POST ,也可以二者同时接收,函数中可以用if语句判断之后处         理相对应的请求响应
        
 7、URL的反向解析

    正向解析:程序自动解析,根据@app.route()中的访问路径,来匹配处理函数

    反向解析:通过视图处理函数的名称自动生成对应的访问路径


    在Flask中要实现反向解析则需要使用:

    url_for(funname,args)

    funname:要生成地址的函数名
    args:该地址中需要的参数

三、模板 - Templates

  1、模板:

     在Flask中就是允许响应给用户看的网页
     在模板中,允许包含“占位变量”来表示动态的内容
     模板最终也会被解析成字符串再响应给客户端,这一过程通常称为“渲染”。

     Flask中的模板是依赖于 Jinja2 模板系统

   2、模板设置

        默认情况下,Flask会在程序文件夹中的 templates 的子文件夹中搜索模板           

        默认情况下,需要手动创建templates

  3、模板的渲染

       作用:在视图中,将模板文件(xx.html) 渲染成字符串之后,再响应给客户端浏览器

       函数:render_template('xxx.html')

             return render_template('xxx.html')   


  4、模板中的语法(重难点)

   1、变量:是一种特殊的占位符,告诉模板引擎该位置的值是从渲染模板时的数据中获取出来的         

     在视图中:

        @app.route('/')
        def index():
           return  render_template('xxx.html',变量1=值1,变量2=值2,...)
         
      在模板中:

         {{变量名}}

          <h1>{{name}}</h1>     

     2、过滤器:过滤器是允许在变量输出前改变变量的值

        语法:{{变量|过滤器}}

        Jinja2 模板中常见过滤器:

               过滤器名                      说明

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

                lower                         将值转换为小写

                upper                         将值转换为大写

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

                trim                           去掉值两边的空格

      3、标签:每个标签标示的是不同点服务器端的功能

        常用的标签

         if 标签    

          (1)基本if结构

                  {% if 条件 %}
                  {% endif %}

            (2)if ... else ...结构

                   {% if 条件 %}
                      满足条件时要运行的代码
                   {% else %}
                      不满足条件时运行的代码
                   {% endif %}

            (3)if ... elif ... elif ... else

                    {% if 条件1 %}
                       满足条件1时要运行的代码
                    {% elif 条件2 %}
                       满足条件2时要运行的代码
                    {% elif 条件3 %}
                       满足条件3时要运行的代码
                    {% else %}
                       不满足以上所有条件时要运行的代码
                    {% endif %}

                   
          for标签

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

               在Jinja2模板的循环中,支持内部变量 - loop

                loop作用:记载当前循环中的一些相关信息
                loop常用属性:

                              1、index

                                   用法:loop.index

                                  作用:记录当前循环的次数,从 1 开始记录

                              2、index0

                                    用法:loop.index0

                                    作用:同上,从0开始记录

                             3、first

                                    用法:loop.first

                                    作用:值为True,则表示当前循环是第一次循环

                             4、last

                                   用法:loop.last

                                   作用:值为True,则表示当前循环是最后一次循环
                      

                macro 标签(宏)

                        1、作用:相当于是在模板中声明函数

                        2、语法:使用  {% macro %}  声明宏  

                                       {% macro 名称(参数列表) %}
                                          xxx   xxx
                                       {% endmacro %}

                        3、在独立的文件中声明宏

                            创建macro.html模板文件

                            作用:定义项目中要用到的所有的宏

                            在使用的网页中,导入macro.html

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

                  4、include 标签

                          将其他的模板文件包含到当前的模板文件中

                          语法:{%  include  'xxx.html'  %}
  

    5、静态文件处理

          1、什么是静态文件?

                在Flask中不能与服务器动态交互的文件都是今天文件

                如:图片,css文件,js文件,音频文件,...

               <img src="images/a.jpg">

               <link rel="" href ="css/a.css">

               <script src =""></script>

               <video src=""></video>

              <audio src=""></audio>

         2、静态文件的处理

               1、所有的静态文件必须放在名为static的目录中

                   static目录要放在项目的根目录处

                   FlaskDemo02

                   templates

                   static

               2、所有的静态文件必须通过/static/路径去访问

                 /static/images/a.jpg

猜你喜欢

转载自blog.csdn.net/extremelove520/article/details/84073349