博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask总结01
阅读量:6676 次
发布时间:2019-06-25

本文共 5406 字,大约阅读时间需要 18 分钟。

一: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/官方文档: 
**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官方推荐的扩展
View Code

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 Flaskapp=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_folderstatic_folder    静态文件存储的文件夹,可以不传,默认为 statictemplate_folder  模板文件存储的文件夹,可以不传,默认为 templates"""app = Flask(__name__)# 加载项目配置# 配置类class Config(object):    DEBUG = Trueapp.config.from_object( Config )# 指定服务器IP和端口app.run(host="0.0.0.0", port=5000, debug = True)
View Code

04:flask路由传递参数

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

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

实现方法:

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

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

实现方法:

 

 

ps:传递多个参数

# 一个路由中可以接受多个路由参数,并且路由转换器也可以使用多个@app.route("/user/
/avatar/
",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 DevConfigapp=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__)# 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: reapp.url_map.converters['re'] = RegexConverter

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

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

@app.route('/user/
')def user_info(user_id): return "user_id 为 %s" % user_id

5:运行

运行测试:
,如果访问的url不符合规则,会提示找不到页面

完整的正则路由案例:

from flask import Flask, requestfrom 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]# 第三步:将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: reapp.url_map.converters['re'] = RegexConverter# 第四步:使用转换器去实现自定义匹配规则# @app.route('/user/
')@app.route("/user/
",methods=["get"])def user_info(user_id): return "user_id为%s" % user_idif __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, requestfrom settings.dev import DevConfigapp = 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" % usernameif __name__ == '__main__':    app.run() 打印结果: === Tom >>> {'username': 'Tom', 'lve': '1'} ---- ['1', '2', '3']

报错点:

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

 

转载于:https://www.cnblogs.com/one-tom/p/10671506.html

你可能感兴趣的文章
MySQL python 数据迁移脚本
查看>>
我的友情链接
查看>>
网站运维常用小技巧,排错必备
查看>>
Python中MySQLdb模块的安装
查看>>
windows下的grep
查看>>
find 详解
查看>>
【书签】valgrind - the dynamic analysis tools
查看>>
zookeeper-体验原生api
查看>>
2015中国呼叫中心知识库发展的5个趋势
查看>>
功能教室预约系统开源下载(c#源码)
查看>>
杨百旺短线技法
查看>>
Linux Mysql Related
查看>>
Impala 和 Hive 之间 SQL 区别(翻译)
查看>>
Exception练习-Exception的正确使用
查看>>
关于rms,打开文档的时候提示您没有权限打开文档,因为您的权限已过期
查看>>
如何在eclipse里关联查看android源码
查看>>
总结:提高服务并发能力之DB
查看>>
jdbcTemplate.queryForList获取的List转实体 -----解决方案
查看>>
IBM V7000U
查看>>
关于Java Servlet的中文乱码
查看>>