一: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. 解决"Windows 安装程序不允许从远程桌面连接安装"

    msiexec /i c:\路径\安装程序 例如 msiexec /i c:\TortoiseSVN-1.7.2.22327-x64-svn-1.7.2.msi

  2. 【bzoj1050】[HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2813  Solved: 1534[Submit][St ...

  3. mfs测试

    续1 6. 参考文献: 6.1 文献 http://sery.blog.51cto.com/10037/263515  田逸 http://bbs.chinaunix.net/thread-16438 ...

  4. Linux 常用基本命令1

    linux终端 linux有6个终端 alt+f1 -f6 切换各个终端  这样有个好处,可以用多个终端同时做事情,一个终端死掉,也可以换另外的终端 cd / 根目录 ls 蓝色的目录 白色是文件 c ...

  5. 598. Range Addition II 矩阵的范围叠加

    [抄题]: Given an m * n matrix M initialized with all 0's and several update operations. Operations are ...

  6. opennebula 镜像池

    { "IMAGE_POOL": { "IMAGE": [ { ", ", ", "TEMPLATE": { & ...

  7. shell chmod中数字与字母的含义

    数字与字母的组合是chmod命令赋予文件,目录访问权限的方式 访问权限:可读,可写,可执行 字母表示:r      , w    , x 数字表示:4     , 2     , 1        , ...

  8. 37.ROUND() 函数

    ROUND() 函数 ROUND 函数用于把数值字段舍入为指定的小数位数. SQL ROUND() 语法 SELECT ROUND(column_name,decimals) FROM table_n ...

  9. 打印单据,A4纸,每个单据占一个A4纸,两个单据之间不挨着

    打印单据,A4纸,每个单据占一个A4纸,两个单据之间不挨着 <style type="text/css" media="print">.Noprin ...

  10. 安装vmtools Error: Unable to execute "/usr/bin/vmware-uninstall-tools.pl.

    Error: Unable to execute "/usr/bin/vmware-uninstall-tools.pl. 安装vmware tools错误解决办法 很多朋友都在用vmwar ...