一:Flask的基本介绍和小案例

01:flask的基本介绍

  

Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。

Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

官网: http://flask.pocoo.org/

官方文档: <http://docs.jinkan.org/docs/flask/>

**Flask常用扩展包:**

- Flask-SQLalchemy:操作数据库,ORM;
- Flask-script:插入脚本;
- Flask-migrate:管理迁移数据库;
- Flask-Session:Session存储方式指定;
- Flask-WTF:表单;
- Flask-Mail:邮件;
- Flask-Bable:提供国际化和本地化支持,翻译;
- Flask-Login:认证用户状态;
- Flask-OpenID:认证;
- Flask-RESTful:开发REST API的工具;
- Flask JSON-RPC: 开发rpc远程服务[过程]调用
- Flask-Bootstrap:集成前端Twitter Bootstrap框架
- Flask-Moment:本地化日期和时间
- Flask-Admin:简单而可扩展的管理接口的框架 可以通过 http://flask.pocoo.org/extensions/ 查看更多flask官方推荐的扩展

02:安装flask

1.准备虚拟环境

mkvirtualenv flask_demo -p python3

2:安装flask

pip install flask==0.12.4

03:创建flask项目

与django不同,flask不会提供任何的自动操作,所以需要手动创建项目目录,需要手动创建启动项目的管理文件
例如,创建项目目录 flaskdemo,在目录中创建manage.py.在pycharm中打开项目并指定上面创建的虚拟环境

小案例:

from flask import Flask
app=Flask(__name__) @app.route('/') ## 也可自定义指定访问路径为 @app.route('/demo1')
def index():
return 'hello world !' if __name__=='__main__':
app.run()

代码分析:

  

# 导入Flask类
from flask import Flask """
import_name Flask程序所在的包(模块),传 __name__ 就可以
其可以决定 Flask 在访问静态文件时查找的路径
static_path 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
static_url_path 静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder 静态文件存储的文件夹,可以不传,默认为 static
template_folder 模板文件存储的文件夹,可以不传,默认为 templates
"""
app = Flask(__name__) # 加载项目配置
# 配置类
class Config(object):
DEBUG = True app.config.from_object( Config ) # 指定服务器IP和端口
app.run(host="0.0.0.0", port=5000, debug = True)

04:flask路由传递参数

1:# 路由传递参数[没有限定类型]

from flask import Flask
app=Flask(__name__) # 路由传递参数[没有限定类型]
@app.route('/home/<user_id>')
def home(user_id):
return 'home page,%s'%user_id if __name__=='__main__':
app.run()

实现方法:

2:# 路由传递参数[限定类型]

from flask import Flask
app=Flask(__name__) @app.route('/test/<int:user_id>')
def test_info(user_id):
return "hello %d "% user_id if __name__=='__main__':
app.run()

实现方法:

ps:传递多个参数

# 一个路由中可以接受多个路由参数,并且路由转换器也可以使用多个
@app.route("/user/<re('\d{3}'):user_id>/avatar/<re('\w{4,8}'):avatar_id>",methods=["get"])
def user2(user_id,avatar_id):
print(request.method)
return "用户%s,头像id:%s" % (user_id,avatar_id)

05:路由限定请求方式.需要导入flask的request模块

案例:

from flask import Flask,request   #倒入路由
from settings.dev import DevConfig app=Flask(__name__) #注册app @app .route('/test_re',methods=["GET","POST"]) #限定请求方式
def test_limit(): return request.method # if __name__=='__main__':
app.run()

案例结果:

二:正则匹配路由

01:正则匹配的路由的实现步骤

在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问

具体实现步骤为:

- 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
- 自定义转换器:自定义类继承于转换器基类
- 添加转换器到默认的转换器字典中
- 使用自定义转换器实现自定义匹配规则

02:代码实现

1:导入转换器基类

from werkzeug.routing import BaseConverter

2:自定义转换器

# 自定义正则转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0]

3:添加转换器到默认的转换器字典中,并指定转换器使用时名字为: re

app = Flask(__name__)

# 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters['re'] = RegexConverter

4:使用转换器去实现自定义匹配规则

  ps“当前此处定义的规则是:3位数字

@app.route('/user/<re("[0-9]{3}"):user_id>')
def user_info(user_id):
return "user_id 为 %s" % user_id

5:运行

运行测试:<http://127.0.0.1:5000/user/123> ,如果访问的url不符合规则,会提示找不到页面

完整的正则路由案例:

from flask import Flask, request
from werkzeug.routing import BaseConverter # 第一步:倒入转换基类 app = Flask(__name__)
# 第二步:自定义转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
self.regex = args[0]
# 第三步:将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters['re'] = RegexConverter # 第四步:使用转换器去实现自定义匹配规则
# @app.route('/user/<re("[0-9]{3}"):user_id>')
@app.route("/user/<re('\d{3}'):user_id>",methods=["get"])
def user_info(user_id):
return "user_id为%s" % user_id if __name__ == '__main__':
app.run()

正则路由案例

运行结果:

匹配结果:

不匹配的结果:

03:系统自带转换器

DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'path': PathConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
} 系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。

04:http的请求和响应

  01:请求

文档: http://docs.jinkan.org/docs/flask/api.html#flask.request

- **request**:flask中代表当前请求的 `request 对象`
- **作用**:在视图函数中取出本次请求数据
- **导入**:``from flask import request``

常用的属性如下:

02:获取请求中查询字符串

from flask import Flask, request
from settings.dev import DevConfig app = Flask(__name__)
app.config.from_object(DevConfig) # http://127.0.0.1:5000/?username=Tom&lve=1&lve=2&lve=3
@app.route('/test03/', methods=["GET", "POST"]) #test03 后面的 / 必须要写 不然会报错
def user_info():
# 获取单个查询字符串参数
username=request.args.get("username")
print("===",username) # # 获取所有查询字符串参数, 获取请求地址中的查询字符串并转换为字典格式
parmas=request.args.to_dict()
print(">>>",parmas)
#
lst=request.args.getlist("lve")
print("----",lst) return "hello %s" % username if __name__ == '__main__':
app.run() 打印结果:
=== Tom
>>> {'username': 'Tom', 'lve': '1'}
---- ['1', '2', '3']

报错点:

@app.route('/test03/', methods=["GET", "POST"])   #test03  后面的  /  必须要写  不然会报错

flask总结01的更多相关文章

  1. Flask—05-理解掌握flask数据模型(01)

    数据模型 数据库回顾 分类: 关系型数据库:MySQL.sqlite.… 非关系型数据库:Redis.MongoDB.… 操作: 执行原生SQL语句,每次都需要拼接SQL语句,非常繁琐而且特别容易出错 ...

  2. Flask基础(01)-->Flask框架介绍

    什么是Flask? 说白了,Flask就是一种web框架 在python中常用的框架有 flask django tornado 什么又是web框架呢?  为什么要使用web框架呢? 增强扩展性和稳定 ...

  3. Flask基础-01.Flask简介

    Flask简介 Web应用程序作用 Web(World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档. 关于Web框架 1. 什么是Web框架? 1. 已经封装好了一段代码,协助程序 ...

  4. 01 flask源码剖析之werkzurg 了解wsgi

    01 werkzurg了解wsgi 目录 01 werkzurg了解wsgi 1. wsgi 2. flask之werkzurg源码流程 3. 总结 1. wsgi django和flask内部都没有 ...

  5. flask --- 01 .初始

    一. 四种web框架比较 Django : 优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 缺点 - 大到浪费资源,请求的时候需要的资源较高 Flask : 优势 - 小而精, ...

  6. 01: flask基础

    1.1 flask介绍   参考博客: https://www.cnblogs.com/sss4/p/8097653.html 1.django.tornado.flask比较 1. Django:1 ...

  7. Flask—09-项目部署(01)

    项目部署 WEB工作原理 客户端(chrom) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=& ...

  8. Flask—07-建立自己的博客(01)

    博客项目 一局王者的时间轻松学会用Flask建立一个属于自己的博客. 需求分析 用户注册登录 用户信息管理 博客发表回复 博客列表展示 博客分页展示 博客收藏点赞 搜索.统计.排序.… 目录结构 bl ...

  9. Flask学习笔记01之环境搭建

    使用pycharm搭建Flask运行环境 1. 打开pycharm ,创建一个新的工程 2. 选择创建Flask项目 3. Flask项目创建成功,结构如下 4. 运行项目 5. 发送请求 over!

随机推荐

  1. Apache Hive 建表操作的简单描述

    客户端连接hive [root@bigdata-02 bin]# ./beeline Beeline version by Apache Hive beeline: Connecting : Ente ...

  2. codeforce 457DIV2 C题

    题意 你需要构造一个n个点m条边的无向有权图,要求这个图的MST中边权的和与从1到n的最短路长度都为素数 分析 可以想到这样一种贪心,在i到i+1直接连一条边,这样最短路和MST都会是同样的一些边.只 ...

  3. 线程dump

    当应用程序运行变慢或者发生故障时,可能通过分析java的Thread Dumps得到分析他们得到阻塞和存在瓶颈的线程. 线程堆栈是虚拟机中线程(包括锁)状态的一个瞬间状态的快照,即系统在某一个时刻所有 ...

  4. Ubuntu下配置Apache的Worker模式

    其实Apache本身的并发能力是足够强大的,但是Ubuntu默认安装的是Prefork模式下的Apache.所以导致很多人后面盲目的去 安装lighttpd或者nginx一类替代软件.但是这类软件有一 ...

  5. 2012年长春网络赛(hdu命题)

    为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...

  6. Git教程--廖雪峰

    Git简介 1.Git是目前世界上最先进的分布式版本控制系统(没有之一) 2.集中式和分布式版本控制系统有什么区别呢?      区别在于历史版本维护的位置:Git本地仓库包含代码库还有历史库,在本地 ...

  7. cmake的一些词的解释

    cmake中一些预定义变量 PROJECT_SOURCE_DIR  工程的根目录 PROJECT_BINARY_DIR    运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR} ...

  8. bzoj 3224/Tyvj 1728 普通平衡树(splay)

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数 ...

  9. JS和JQuery的比较

    一. Jquery它是javascript的一个轻量级框架,是对javascript进行封装. 二.JQuery和JS都有加载函数,但表达方式不同. 1.JS中的加载函数: //整个文档加载完毕后执行 ...

  10. NPOI 2.1.3.1导入Excel

    引入NPOI 2.1.3.1的包 项目引入 using NPOI.XSSF.UserModel;using NPOI.SS.UserModel; 控制器方法: public ActionResult ...