Flask
2016-10-27 20:58:20 0 举报
AI智能生成
Flask
作者其他创作
大纲/内容
简介
轻量级
基于Werkzeug WSGI
微框架 核心简单
特色
自带开发服务器
集成单元测试
Jinjia2
RESTFual
Unicode
丰富的扩展
安装与配置
创建虚拟隔离环境
创建虚拟环境
退出虚拟环境
pip 安装组件
激活虚拟环境上下文
pip install flask
快速实例
入口类
Flask()实例
@app.route('/') 路由装饰响应处理函数
程序配置 app.debug = True
程序运行
站点目录
static
css/js/img
templates
index.html
contact.html
...
model
模型类
views
调度方法/函数
请求/响应流程
路由接收请求
分配给特定的视图函数
视图函数返回视图
详细笔记参见为知
核心对象
Request
上下文
浏览器自动创建
手动创建
.push()
.pop()
地址栏编码
编码
py:urllib.parse.quote('params')
jinjia2:{{ params|urlencode }}
解码
urllib.parse.unquote('params')
成员属性
.path 请求属性
.method 方法
.args.get('keys','default') # 获取地址栏字符串
.form 表单成员
.form['name']
.form.get('name')
.values['name']
.headers 头部信息
.headers['User-Agent'] 浏览器
.headers['Host'] 主机
...
.remote_addr 客户端ip
.environ 环境
.full path 完整路径
.url
.base_url
.url_root
.is_xhr 是否XMLHttpRequest请求
.blueprint 当前蓝图
.endpoint 终节点
.view_args 视图参数
Response
构造
make_response(响应内容,状态码,头部信息)
.status_code = 200 / .status = '200'
.response 响应内容
.headers['Content_type'] = 'text/heml'
头部信息字典表
头部信息字典表
.redirect('/b/',code=301/302) 重定向请求
.url_for('rq_b') 根据终节点生成匹配的url
abort() 抛出状态状态码
send_from_directory('目录','文件名') 呈现特定目录资源
模板 Jinjia2
基本语法
{{ 变量 }}
{% 语句 %}
{# 注释 #}
模板继承
布局页
内容页
循环相关属性
loop.index 索引 从1开始
loop.index0 从0开始
视图函数传参
函数定义 def xxx(param)
{{ url_for('xxx',param=item.id) }}
Flash Message
flask.flash('message')
jinja2: {% get_flashed_messages() %}
数据库管理
图片上传
<form enctype="multipart/form-data"...>
<input type="file"...>
状态管理
会话状态 Session
功能用途:在不同请求中共享信息
编码
给程序设置安全码 app.secret_key
声明:session['key'] = value
获取:
Session['key']
Session.get('key','default')
清除:session.pop('key')
Cookie
机制:服务器 发送的小段文本信息存储在客户端硬盘
功能
记录用户偏好
请求、页面、站点间共享信息
特点
易丢失
安全性
操作
写入
resp = make_response()
resp.set_cookie()
'key','value'
domain 作用域名
path 作用目录
max_age 生命周期(/s)
expires 过期时间
读取
request.cookie.get('key')
删除
重设过期时间再写入覆盖
可拔插视图
基于类的视图
写类 继承自flask.views.View
实现方法 dispatch_request(self)
app注册URL规则
导入视图类
app.add_url_rule('/path/',类名,
view_func=类名.as_view('终节点名'))
view_func=类名.as_view('终节点名'))
基于方法的视图
类继承自 flask.view.MethodView
GET def get(self):
POST def post(self):
PUT def put(self):
Blueprint 程序模块化
创建Blueprint
from flask import Blueprint
bp = Blueprint('bp',__name__)
@bp.route('/') 或基于类/方法视图
注册
from xxx import bp
app.register_blueprint(bp,url_prefix='/url/')
生成链接
url_for('blueprint.view_func',id=xx)
ORM
Object Relational Mapper
SQLAlchemy
flask_sqlalchemy
安装flask_sqlalchemy
配置
db = flask_sqlalchemy.SQLAlchemy(app)
或 db.init_app(app) 绑定当前程序上下文
选项
'SQLALCHEMY_DATABASE_URI' 数据库连接
sqlite
sqlite:///./path/database.db
基本形式:别名+驱动://用户名:密码@主机:端口/数据库
'SQLALCHEMY_TRACK_MODIFICATIONS' 是否跟踪修改
'SQLALCHEMY_ECHO' 显示对应SQL
模型类
功能:对应生成数据库表
基类:db.Model
列:db.Column(类型,选项...)
类型
db.INTEGER() 整型
db.String() 字符串
db.Text() 文本
db.DateTime() 日期时间
db.Float() 浮点
db.Boolean() 布尔
db.PickleType() pickle序列对象
db.LargeBinary() 大二进制对象
选项
primary_key 是否主键
unique 是否唯一
default=默认值
关系(一对多)
外键 db/Column(db.Integer,db.ForeignKey('表名.id'))
db.relationship('主键类名',backref='引用属性名',lazy='dynamic')
dynamic 动态
select
subquery
joined
核心对象
db.create_all() 创建所有表
db.drop_all() 删除所有
0 条评论
下一页