Flask简介

Flask是一个基于Python实现的Web开发‘微’框架 'MicroFramework'
Django是一个重型框架
官方文档: http://flask.pocoo.org/docs/0.12/
中文文档: http://docs.jinkan.org/docs/flask/
Flask和Django一样,也是一个基于MVC设计模式的Web框架
M:Model   V:View   C:Controller
MVVM, MVT
Flask依赖三个库
  Jinja2 模板引擎 {% %}  模板:静态html+模板语言{%  %}
  Werkzeug WSGI工具集
  Itsdangerous 基于Django的签名模块
  
流行的Flask
Flask流行的主要原因:
  1. 有非常齐全的官方文档,上手非常方便
  2. 有非常好的扩展机制和第三方扩展环境,工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易
  3. 社区活跃度非常高
  4. 微型框架的形式给了开发者更大的选择空间
 

MVC模式/MTV模式

一种软件设计典范,用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面与用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化界面结构中。
    核心思想:解耦
    优点:降低各个模块之间的耦合性,方便变更,更容易重构代码,最大程度实现了代码的重用。
MVC(Model,View,Controller)
    Model:用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑部分,Model通常只提供功能性的接口,通过这些接口可以获取Model的所有功能。
    View:负责数据的显示和呈现,View是对用户的直接输出。
    Controller:负责从用户端收集用户的输入,可以看成提供View的反向功能,主要处理用户交互。
MVT模式简介
    本质上与MVC没什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同。
    Model:负责业务对象与数据库(ORM)的对象, models.py: 数据
    View:负责业务逻辑,并在适当的时候调用Model和Template, views.py:控制器
    Template:负责把页面展示给用户, html: 界面
url:路由, urls.py

使用Flask

虚拟环境

1, virtualenv的概述
    virtualenv是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实环境存在,并且可以同时有多个互相独立的Python虚拟环境,每个虚拟环境都可以营造一个干净的开发环境,对于项目的依赖、版本的控制有着非常重要的作用。
    虚拟环境有什么意义?
    比如: 我们要同时开发多个应用程序,应用A需要Django1.11,而应用B需要Django1.8怎么办, 这种情况下,每个应用可能需要各自拥有一套独立的Python运行环境,virtualenv就可以用来为每一个应用创建一套'隔离'的Python运行环境。
2, 安装pip
   【请使用普通用户】 
    a. 查看pip版本
        查看pip版本: pip -V
        查看pip3版本: pip3 -V
    b. 安装pip(如果存在则不需要安装)
        安装pip3: apt install python3-pip    
         安装pip2: apt install python-pip    
    c. 更新pip
        更新pip (如果pip版本高于9.0则不需要更新): 
            更新pip3: pip3 install --upgrade pip
             更新pip: pip install --upgrade pip
         注意: 更新后如出现以下错误(这是pip 10.0.0版本的BUG):
            Traceback (most recent call last): 
            File “/usr/bin/pip”, line 9, in 
            from pip import main
            解决方法:修改对应pip文件中的代码(pip和pip3类似)
                例如更新pip时报错则需要修改 /usr/bin/pip 文件中的代码,
                使用: sudo vim /usr/bin/pip 打开pip文件
                将:          
                    from pip import main
                    if __name__ == '__main__':
                        sys.exit(main())
                改成:
                    from pip import __main__
                    if __name__ == '__main__':
                        sys.exit(__main__._main())
    d. 让pip默认使用python3, 执行命令:
        sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

    e. pip命令
        pip install xxx:安装xxx依赖包
        pip list:查看所有依赖包
        pip freeze:查看新安装的包
        pip uninstall xxx :卸载xxx包
3, virtualenv和virtualenvwrapper 的安装和使用
   【请使用普通用户】 
    a. 安装虚拟环境
        sudo apt update
        sudo pip3 install virtualenv virtualenvwrapper
        
        安装后如果不能使用虚拟环境命令,则需要配置环境变量
            1, 进入家目录: cd ~
            2, 使用vim打开.bashrc, 定位到最后:shift+g,并添加以下2行代码(注意修改自己Ubuntu的用户名)
                    export WORKON_HOME=/home/自己Ubuntu的用户名/.virtualenvs
                    source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
            3, 在家目录创建.virtualenvs目录: mkdir .virtualenvs
            4, 加载修改后的设置,使之生效:source .bashrc
            (如果找不到virtualenvwrapper.sh,
             则将路径改成/usr/local/bin/virtualenvwrapper.sh
             然后重试 )
    b. 创建虚拟环境: 
        mkvirtualenv env  
        mkvirtualenv env2 -p /usr/bin/python3  (指定python路径)
    c. 退出虚拟环境
        deactivate 
    d. 进入虚拟环境: 
        workon 虚拟环境名称
 

第一个Flask项目

创建项目

创建虚拟环境
    mkvirtualenv flaskenv
在虚拟环境中安装flask
    pip install flask
    
创建helloFlask.py文件,并写入以下代码:
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def hello():
        return 'Hello Flask'
    if __name__ == '__main__':
        app.run()
run()启动的时候还可以添加参数:
    debug 是否开启调试模式,开启后修改过python代码会自动重启
    port 启动指定服务器的端口号
    host 主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip
 

flask-script插件使用

flask-script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本及其他运行在web应用之外的命令行任务;使得脚本和系统分开;
1.安装
    pip install  flask-script
2.初始化
    manager = Manager(app)
3.调用
    在run的地方修改,修改manager.run()
4.可以在命令行中使用: python manage.py runserver
  还可以接收参数: python manage.py runserver -p 8000 -h 0 -d -r
    p  端口 port
    h  主机  host
    d  调试模式  debug
    r  重启(重新加载) reload(restart)

代码结构

static 静态资源文件
templates 模板文件
默认两个都可以直接使用, 直接使用相对路径就好
模板渲染
  render_template()
  其实也是分为两个过程,加载和渲染
    template = Template(“<h2>呵呵</h2>”)
    template.render()
静态使用,相当于反向解析
  url_for(’static’,filename=‘hello.css’)

请求流程

项目拆分

代码全都写在manage.py一个文件中是不现实的, 我们可以对项目进行简单的拆分

将原来的app.py文件重命名为:manage.py

 
from flask_script import Manager
from App import create_app
# 创建app
app = create_app()
# 创建manager对象
manager = Manager(app)
if __name__ == '__main__':    
    manager.run()
 

新建目录App, 并在App的init文件中创建app对象

from flask import Flask
# 创建app
def create_app():
    app = Flask(__name__)       
    return app
 
蓝图blueprint
 
1,宏伟蓝图(宏观规划)
2,蓝图也是一种规划,主要用来规划urls(路由)
3,蓝图基本使用
  安装
    pip install flask-blueprint
    
  在views.py中初始化蓝图
    blue = Blueprint('first', __name__)
    
  在init文件中调用蓝图进行路由注册
    app.register_blueprint(blueprint=blue)
   

route路由

 
路由:
   将从客户端发送过来的请求分发到指定函数上
路由通过装饰器对应视图函数,并且可以接收参数,所以我们只需要在视图函数上使用装饰器即可
语法
  @app.route(‘/rule/’)
  def hello():
      return ‘Hello World!’  
      
  @app.route(‘/rule/<id>/’)
  def hello(id):
      return ‘Hello%s’ % id
写法
    <converter:variable_name>
converter类型
    string  接收任何没有斜杠(‘/’)的文件(默认)
    int 接收整型
    float   接收浮点型
    path    接收路径,可接收斜线(’/’)
    uuid    只接受uuid字符串,唯一码,一种生成规则
    any 可以同时指定多种路径,进行限定
     
请求方法
    默认支持GET,HEAD,OPTIONS, 如果想支持某一请求方式,需要自己手动指定
    @app.route(‘/rule/’,methods=[‘GET’,’POST’])
    def hello():
        return ‘LOL’
    
methods中指定请求方法
    GET
    POST
    HEAD 
    PUT
    DELETE
    
url_for
    反向解析,根据函数名字,获取反向路径
    url_for("蓝图名.函数名")
    url_for(‘函数名’,参数名=value)
 

Request

服务器在接收到客户端的请求后,会自动创建Request对象
由Flask框架创建,Request对象不可修改
属性
  url  完整请求地址
  base_url  去掉GET参数的URL
  host_url  只有主机和端口号的URL
  path  路由中的路径
  method  请求方法
  remote_addr  请求的客户端地址  
  args  GET请求参数 
  form  POST请求参数
  files  文件上传 
  headers  请求头
  cookies  请求中的cookie
    
ImmutableMultiDict: 类似字典的数据结构, 与字典的区别,可以存在相同的键  
    args和form都是ImmutableMultiDict的对象
ImmutableMultiDict中数据获取方式
    dict['uname'] 或 dict.get('uname)
获取指定key对应的所有值
    dict.getlist('uname')
                             
1. args
   - get请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象
   - 数据存储也是key-value
   - 外层是列表,列表中的元素是元组,元组中左边是key,右边是value
2. form
   - 存储结构个args一致
   - 默认是接收post参数
   - 还可以接收 PUT,PATCH参数
 

Response

服务器返回给客户端的数据
由程序员创建,返回Response对象
  1. 直接返回字符串, 可以返回文本内容,状态码
  2. render_template 渲染模板,将模板转换成字符串
  3. 通过make_response(data,code)
    - data 返回的数据内容
    - code 状态码
  4. 返回Response对象
重定向
  redirect()
  url_for(‘函数名’,参数=value)
终止执行, 抛出异常
    主动终止 abort(code)
捕获异常
    @app.errorhandler(404)
    def hello(e):
        return ‘LOL’
 

会话技术

Cookie

客户端端的会话技术
cookie本身由浏览器保存,通过Response将cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来
特点:
    - 客户端会话技术,浏览器的会话技术
    - 数据全都是存储在客户端中
    - 存储使用的键值对结构进行的存储
    - 特性
        - 支持过期时间
        - 默认会自动携带本网站的所有cookie
        - 根据域名进行cookie存储
        - 不能跨域名
        - 不能跨浏览器
    - Cookie是通过服务器创建的Response来创建的
 
 设置cookie:
    response.set_cookie(key,value[,max_age=None,exprise=None)]
        max_age: 整数,指定cookie过期时间
        expries: 整数,指定过期时间,可以指定一个具体日期时间
        max_age和expries两个选一个指定
 获取cookie:
    request.cookie.get(key)
 删除cookie
    response.delete_cookie(key)
 

session

服务器端会话技术,依赖于cookie
特点:
    - 服务端的会话技术
    - 所有数据存储在服务器中
    - 默认存储在内存中
        - django是默认做了数据持久化(存在了数据库中)
    - 存储结构也是key-value形势,键值对
    - session 是离不开cookie的
常用操作:
    设置session
        session[‘key’] = ‘value’ 
        
    获取session
        session.get(key,default=None) 根据键获取会话的值
        
    删除session
        pop(key) 删除某一值  
        clear()   清除所有
        
 

Flask (一) 简介的更多相关文章

  1. Flask 框架 简介

    一.Flask介绍 Flask是一个基于Werkzeug,Jinja 2 轻量级的web开发框架, 使用Python开发, 上手简单. 二.安装Flask 三.第一个Flask程序 1.编写app.p ...

  2. Flask框架简介,常用扩展包及两大核心

    Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的功能都 ...

  3. Flask 参数简介

    我们都知道学习了Flask的时候它里面的参数是有很多种的参数  都是需要相互进行调用传递的  今天就简要分析一些常见的参数 首先导入Flask之后看 源码 from flask import Flas ...

  4. Flask框架简介

    Flask框架诞生于2010年,是Armin ronacher 用python语言基于Werkzeug工具箱编写的轻量级Web开发框架! Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展. ...

  5. Python框架 Flask 项目实战教程

    本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...

  6. python flask实现小项目方法

    本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走. 下载源码,运行 pip install -r requirements.txt 建立环境 python ...

  7. flask基础之安装和使用入门(一)

    前言 Flask框架作为一个python极简化的web框架,它不像Django那样的重型,非常适合快速开发一些小型的应用.本人用flask开发了几个项目之后,慢慢研究flask底层的一些原理,开始一步 ...

  8. Flask—01-轻松入门Flask

    Flask入门 WEB工作原理 C/S与B/S架构:客户端-服务器,浏览器-服务器 B/S架构工作原理 客户端(浏览器) <=> WEB服务器(nginx) <=> WSGI( ...

  9. Flask Web开发从入门到放弃(一)

    第1章 章节一 01 内容概要 02 内容回顾 03 路飞学城之加入购物车 04 路飞学城之结算 05 路飞学城之立即支付 06 路飞学城之后续计划 07 Flask框架简介和快速使用 08 FLas ...

随机推荐

  1. 03-树2 List Leaves(25 point(s)) 【Tree】

    03-树2 List Leaves(25 point(s)) Given a tree, you are supposed to list all the leaves in the order of ...

  2. Windows Server 2012 修改桌面图标

    在virtualbox 4.2.18中装了个Windows Server 2012 来体验下,结果发现桌面图标都不知道在哪改.在百度文库上找到了解决方法:http://wenku.baidu.com/ ...

  3. ansible-playbook 打通ssh无秘钥

    建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...

  4. WebApi发送HTML表单数据:文件上传与多部分MIME

    5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...

  5. MySQL丨5.6版本插入中文显示问号解决方法

    解决办法: 1.找到安装目录下的my-default.ini 这个配置文件 2.copy一份粘贴到同目录下 另命名为my.ini 3.在my.ini 配置下加上下面几句代码 并保存 [mysql]de ...

  6. 最小点覆盖 hdu--1054

    点击打开题目链接 最小点覆盖=最大二分匹配的 (单向图) ; 最小点覆盖=最大二分匹配的一半 (双向图) ; 证明 所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案 具体算法都已经 ...

  7. bzoj 3771 Triple —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 令多项式的系数是方案数,次数是值: 设 a(x) 为一个物品的多项式,即 a[w[i] ...

  8. 比利牛斯獒犬 flask web

    1. 使用 session.get('name') 直接从会话中读取 name 参数的值.和普通的字典一样,这里使用 get() 获取字典中键对应的值以避免未找到键的异常情况,因为对于不存在的键, g ...

  9. 关于group_concat函数拼接字符超长的问题

    昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...

  10. JS搜索商品(跟外卖app店内搜索商品一样) ,keyup函数和click函数调用

    HTML: input输入框: <input id="sea" type="text"> JS: //点击搜索商品 $('#mys').click( ...