一: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. ionic中的后退方法

    1)$ionicHistory.goBack(); 2)$ionicNavBarDelegate.back(); 个人感觉: 1)$ionicHistory.goBack()会按照html历史来后退 ...

  2. char(10)、varchar(10)、nchar(10)、nvarchar(10)的区别

    CHAR CHAR是定长的,当输入的字符小于10时,会在后面补空值,如果长度大于10,则会截取超出的字符 CHAR字段上的索引效率级高 VARCHAR 存储边长数据,但存储效率没有CHAR高 从空间上 ...

  3. selenium2 用testNG对百度首页输入框进行测试 (三)

    如果还没有安装testNG的亲,可以点击http://www.cnblogs.com/milanmi/p/4346580.html查看安装过程. 这节主要是对百度首页的输入框进行输入测试. packa ...

  4. Docker学习笔记_网上资源参考

    Docker学习,网上资源参考 1.菜鸟教程:                                                        http://www.runoob.com ...

  5. Entity Framework edmx(mapping文件)

    <?xml version="1.0" encoding="utf-8"?><edmx:Edmx Version="2.0" ...

  6. Jlabel实现内容自动换行

    Jlabel实现内容自动换行 摘自:https://blog.csdn.net/zhhtao89/article/details/50179695   2015年12月04日 21:09:27 阅读数 ...

  7. Part3_lesson3---ARM伪指令学习

    1.ARM机器码 对elf格式的文件进行反汇编可得到相应汇编文件的机器码: arm-linux-objdump -D -S start.elf 机器码的解析,可以参考文件ARM Architectur ...

  8. Which Uri Encoding method should i use in C#/.net?

    June 19, 2015 This too is one of the boring "factual" posts. Sorry Lachlan. I never know w ...

  9. Java 正则表达式的实际应用

    正则表达式最详细-----> | |目录 1匹配验证-验证Email是否正确 2在字符串中查询字符或者字符串 3常用正则表达式 4正则表达式语法 1匹配验证-验证Email是否正确 public ...

  10. Linux:SSH免密码登录

    1.使用包管理器安装openssh: 本人的系统是Arch Linux,因此安装命令为:sudo pacman -S openssh 2.使用ssh-keygen命令创建公钥: #ssh-keygen ...