Flask入门

WEB工作原理

  • C/S与B/S架构:客户端-服务器,浏览器-服务器
  • B/S架构工作原理
    • 客户端(浏览器) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=> 数据库(MySQL)
    • 说明:flask自带一个测试的WEB服务器,但是它仅仅适合于测试环境,不能用于生产环境。

MVC与MTV框架

  • MVC框架

    • M:Model,模型,即数据模型,负责数据的存取。
    • V:View,视图,负责数据的展示效果。
    • C:Controller,控制器,负责业务逻辑的处理。
  • MTV框架
    • M:Model,模型,即数据模型,负责数据的存取。
    • T:Templates,模板,负责数据的展示效果。
    • V:View,视图函数,负责业务逻辑的处理。
  • 总结:使用MVC或MTV就是为了解耦,可以提高开发维护的效率。

Flask框架简介

  • 说明:

    flask是一个轻量级的web框架,被称为微型框架。只提供了一个高效稳定的核心,其它全部通过扩展来实现。意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩展库。

  • 核心:

    • WSGI系统、调试、路由
    • 模板引擎(Jinja2,是flask核心开发者人员开发的)
  • 安装:pip install flask

启动完整代码

  • 完整代码

    # 导入类库
    from flask import Flask # 创建应用实例
    app = Flask(__name__) # 添加视图函数
    @app.route('/')
    def index():
    return 'Hello Flask!' # 启动应用
    if __name__ == '__main__':
    app.run()
  • 启动参数

    参数 说明
    debug 是否开启调试模式,默认为False;开启后会有出错调试信息,文件会自动加载。
    threaded 是否开启多线程,默认为Flase。
    host 指定主机,默认为'127.0.0.1',设置为'0.0.0.0'后可以通过IP进制访问
    port 指定端口,默认为5000。

    启动示例:app.run(debug=True, threaded=True, host=’0.0.0.0’, port=5555)

flask-script

  • 说明:

    简单来说,该库就是flask终端启动的参数解析器;这样就可以不更改代码就能完成不同方式的启动。

  • 安装:pip install flask-script

  • 使用:

      # 导入类库
    from flask_script import Manager # 创建对象
    manager = Manager(app) # 启动应用
    if __name__ == '__main__':
    manager.run()
  • 启动参数:

    参数 说明
    -?,--help 查看帮助
    -h,--host 指定主机
    -p,--port 主动端口
    -d,--debug 开启调试模式
    -r,--reload 自动加载
    --threaded 开启多线程
    --processes 指定多进程数量

    启动示例:python manage.py runserver -d -r -h 0.0.0.0 -p 5555

flask使用

  • 视图函数

    • 示例:
    # 无参路由
    @app.route('/')
    def index():
    return '<h1>Hello Flask!</h1>' # 带参路由,可以传递多个参数
    @app.route('/welcome/<name>/<uid>/')
    def welcome(name, uid):
    return 'Hello {} {}'.format(name, uid) # 指定参数类型,如:str(默认)、int、float、path
    @app.route('/user/<int:uid>/')
    def user(uid):
    return 'Hello {}号'.format(uid) # path类型:类型仍然是str,只是将'/'当做普通字符处理而已
    @app.route('/path/<path:p>/')
    def path(p):
    return p
    • 说明:
    1.路由末尾的'/'建议都加上,防止出现路由多敲'/'出现的问题
    2.若需要路由参数,参数需要放在<>中,对应的视图函数需要同名的参数
    3.路由参数可以指定多个,也可以指定类型
    4.常用参数类型:str(默认)、int、float、path,使用时放在参数前面,使用':'与参数连接
    5.path类型其实是str类型,只是将'/'作为普通字符处理罢了。
  • 请求(request)

    from flask import request
    
    # 请求,request中存放了所有的HTTP请求信息
    @app.route('/request/')
    def req():
    # 完整的路由地址
    # return request.url
    # 不包含GET参数的路由地址
    # return request.base_url
    # 只有协议主机和端口
    # return request.host_url
    # 只包含装饰器中的路由地址
    # return request.path
    # 请求方法的类型:GET、POST
    # return request.method
    # 客户端的IP
    # return request.remote_addr
    # args:GET参数;form:POST参数;values:GET和POST
    # return request.args.get('uid', '默认值')
    # headers:所有的请求头信息
    return request.headers.get('User-Agent')
  • 响应(response)

    from flask import make_response
    
    # 响应response
    @app.route('/response/')
    def response():
    # 直接返回字符串
    # return 'OK'
    # 可以在返回时指定状态码,默认都是200
    # return 'page not found', 404
    # 先用专门的函数构造一个响应对象,可以指定内容及状态码等
    resp = make_response('这是通过函数构造的响应', 404)
    # 设置响应头信息
    resp.headers['uid'] = 250
    return resp
  • 重定向(redirect)

    from flask import redirect, url_for
    
    # 重定向
    @app.route('/old/')
    def old():
    # return '原来的数据'
    # 通过url来重定向新的路由地址,参数是希望重定向的url
    # return redirect('/new/')
    # 根据视图函数名反向构造路由地址,参数是视图函数名
    # return url_for('new')
    return redirect(url_for('new')) @app.route('/new/')
    def new():
    return '新的数据'
  • 反向构造路由(url_for)

    # 反向构造路由
    @app.route('/urlfor/')
    def urlfor():
    # 不带参数的路由
    # return url_for('new')
    # 可以构造带参的路由,多出来的参数以GET形式传递
    # return url_for('user', uid=250, name='cuihua')
    # 构造完整(带协议主机和端口)路由,可以进行外部跳转
    return url_for('user', uid=250, name='cuihua', _external=True)
  • 终止及错误定制

    # 终止abort
    @app.route('/abort/')
    def err():
    # 终止代码执行,其实是向系统抛出指定异常
    # 系统捕获异常,按照统一的方案进行处理
    abort(404)
    return '正常' # 定制错误显示
    @app.errorhandler(404)
    def page_not_found(e):
    return '是不是搞错了大哥?'

蓝本使用

  • 说明:

    当大量的视图函数存放在一个文件中,很明显是不合适的。最好是根据功能模块进行划分,将相关的功能模块放在同一文件,蓝本就是用来解决这个问题的。

  • 使用:

    • user.py
    # 导入类库
    from flask import Blueprint, url_for # 创建对象,可以指定统一的前缀
    user = Blueprint('user', __name__, url_prefix='/user') # 添加视图函数
    @user.route('/login/')
    def login():
    # 当反向构造同一蓝本中的路由时,蓝本名可以省略,但是不能省略'.'
    return url_for('.register')
    return '欢迎登录' @user.route('/register/')
    def register():
    return '欢迎注册'
    • manage.py

      from user import user
      # 注册蓝本,注册时可以再次设置相关参数,而且优先级较高,user:蓝本名,url_prefix:路由
      app.register_blueprint(user, url_prefix='/u') @app.route('/urlfor/')
      def urlfor():
      # 构造蓝本中的路由(蓝本中的'/u')时,参数这样传递:'蓝本名.视图函数名'
      return url_for('user.login')

Flask—01-轻松入门Flask的更多相关文章

  1. Web开发入门教程:Pycharm轻松创建Flask项目

    Web开发入门教程:Pycharm轻松创建Flask项目 打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask.Django等等,我们选择生成Fla ...

  2. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  3. 比我的脸还干的gan货——Python Flask Web 框架入门

    Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...

  4. Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

  5. flask 框架快速入门

    flask 框架快速入门 搭建一个简易flask项目 首先使用 Pycharm创建flask项目 运行flask项目 1.使用Pycharm搭建flask项目 (如果Pycharm新建项目中未出现该图 ...

  6. Flask微型框架入门笔记

    例程: from flask import Flask app = Flask(__name__) # 新建一个Flask可运行实体(名字参数如果是单独应用可以使用__name__变量,如果是modu ...

  7. flask轻量级框架入门

    # -*- encoding: utf-8 -*- #导入Flask类, 导入重定向,url_for是简易寻址跳转, from flask import Flask,redirect,url_for, ...

  8. 一篇博客带你入门Flask

    一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...

  9. flask框架基础入门一

    首先:flask是一个基于Werkzeug,Jinja2的一个python的微服务框架. 安装flask框架: pip install flask 一个最小的最简单的flask应用: from fla ...

随机推荐

  1. s中的闭包

    今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易. 当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为 ...

  2. [转]EntityFramework中常用的数据修改方式

    本文转自:http://blog.csdn.net/itmaxin/article/details/47662151 上一篇文章里提到了 EntityFramework中常用的数据删除方式,那么修改对 ...

  3. 关于日常使用Azure MySQL中遇到的连接问题以及排查方法分享

    由于防火墙问题,TCP keep alive 问题,以及 MySQL 自身的参数问题这三个在使用中比较常见,所以今天就分享下自己找到的排查方法. 今天先聊一聊防火墙问题 大多数人在第一次创建 MySQ ...

  4. hashlib库的使用

    这个模块实现了许多不同的安全哈希和消息摘要算法的通用接口.包括FIPS安全哈希算法SHA1.SHA224.SHA256.SHA384和SHA512(在FIPS 180-2中定义)以及RSA的MD5算法 ...

  5. Etcd入门教程

    etcd是一个类似于zk的工具,用于保存值,节点-值这种映射关系的.节点组织结构类似unix文件系统结构,从/最开始.比如一个/test/name节点,值为guanxianseng.可以通过etcdc ...

  6. java常用API之基本类型包装类

    基本类型包装类概述: 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的. 而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型. 想实现字符串与基本数据之间转换,需 ...

  7. 类的方法练习——定义MySQL类

    要求: 1.对象有id.host.port三个属性 2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3.提供两种实例化方式,方式一:用户传入host和port 方式二: ...

  8. 基于forms组件和Ajax实现注册功能

    一.基于forms组件的注册页面设计 1.运用forms组件的校验字段功能实现用户注册 views.py:    (在钩子中代码解耦,将form放在cnblog/blog/Myforms.py中) f ...

  9. ECMAScript 6简介

    一.起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐上来就 ...

  10. css3总结之居中

    居中在前端布局上很常见,也很常用,也是最基本的技巧.居中效果在方向控制上基本可以分解成水平居中,垂直居中和水平垂直居中. 针对调整的元素不同,具体的处理方式上有些差异.这里我们先不讲绝对定位下的居中, ...