Flask
1. Flask 是一个Python实现的WEB开发微框架;
1)django — 完善完整高集成的框架
2) flask — 不包含数据库抽象微框架,database, templates 需要自己组装
2. 安装
创建虚拟环境: virtualenv --no-site-packages flaskenv
cd flaskenv/Script
启动虚拟环境: activate
3. 新建与运行Flask
1) 新建:Pycharm新建project, 环境选择已经建好的虚拟环境, 项目选择flask;
2) 运行: python xxx.py -- 启动默认127.0.0.1:5000端口
3) 运行参数: debug = True 调试
port = '8000' 端口
host = '0.0.0.0' IP
4. 修改启动方式
1) 安装包: pip install flask-script
2) 启动方式: python xxx.py runserver -p 端口 -h IP地址 -d
5. 蓝图 – 管理url, 规划url
1) 安装包: pip install flask-blueprint
2) 初始化
3) 路由注册
【4、5注解:端口,IP默认为:127.0.0.1:5000 -d 为调试模式】
6. route规则
a) django:
\(\d+)\
\<?P(\d+)>\
b) flask
<converter:name>
# converter 可以是如下内容,name为参数
string:默认字符串,可以省略
int: 整型
float: 浮点型
path: '/'也是可以当做字符串返回
uuid: uuid类型
7. request 请求
args -- GET请求,获取参数
form -- POST请求,获取参数
files -- 上传的file文件
method -- 请求方式
8. 蓝图前缀
url_prefix = 'hello'
9. response 响应
服务端自己创建,然后返回给客户端
传入自己定义的状态码(如404,500等)
make_response('页面', 状态码)
10. 使用数据库
SESSION_TYPE类型: redis, mongdb, memcached, sqlchemy
#1 秘钥
app.config['SECRET_KEY'] = 'secret_key'
#2 使用redis存储信息,默认访问本地redis,127.0.0.1:6379
app.config['SESSION_TYPE'] = 'redis'
#3. 连接远程redis
app.config['SESSION_REDIS'] = redis.Redis(host='此处填IP地址',post='6379',password='数据库密码'
【注1】:
session: session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。
【注2】
flask中使用cookie和session
1) cookies:在Flask中操作cookie,是通过response对象来操作,可以在response返回之前,通过response.set_cookie来设置,这个方法有以下几个参数需要注意:
a) key:设置的cookie的key。
b) value:key对应的value。
c) max_age:改cookie的过期时间,如果不设置,则浏览器关闭后就会自动过期。
d) expires:过期时间,应该是一个datetime类型。
e) domain:该cookie在哪个域名中有效。一般设置子域名,比如cms.example.com。
f) path:该cookie在哪个路径下有效。
2) session:Flask中的session是通过from flask import session。然后添加值key和value进去即可。并且,Flask中的session机制是将session信息加密,然后存储在cookie中。专业术语叫做client side session。
11. 网页‘挖坑’、‘填坑’
{% block xxx %}{% endblock %}
12. 加载css:
a) Django:
第一种方式:
{% load static %}
<link rel="stylesheet" href="{% static 'css/xxx.css'%}">
第二种方式:
<link rel="stylesheet" href="/static/css/xxx.css">
b) Flask
第一种方式:
<link rel="stylesheet" href="{{ url_for('static', filename='css/xxx.css')}}">
第二种方式:
<link rel="stylesheet" href="/static/css/xxx.css">
13. 网页过滤器
safe: 渲染标签
striptags: 渲染之前去掉标签
trim: 去掉空格
length: 计算长度
第一个字母: {{ i|first }}
最后一个字母: {{ i|last }}
全部转换为小写: {{ i|lower }}
全部转换为大写: {{ i|upper }}
首字母大写: {{ i|capitalize }}
14. 数据库
a) 安装模块:
pip install flask-sqlalchemy
pip install pymysql
primary_key: 指定主键
autoincrement: 自增
unique: 唯一
default: 默认值
Integer: 整型
String: 字符串
__tablename__: 指定数据库名称
b) 连接数据库:
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:此处填密码@IP:端口/数据库名称'
c) 添加多条学生信息:
s_list = [学生对象1,学生对象2, ......]
db.session.add_all(s_list)
d) 运算符
1) filter(模型名.字段.运算符('xxx'))
例如:filter(Student.s_age.__lt__(20)) -- 查找年龄少于20岁的学生
2) filter(模型名.字段 运算符 值)
例如: filter(Student.x_age < 20) --查找年龄少于20岁的学生
__lt__ 小于
__le__ 小于等于
__gt__ 大于
__ge__ 大于等于
in_ 在......范围内
order_by() 排序
limit(n) 截取n个信息
offset(n) 跳过n个信息
get 获取主键对应的信息
or_ 或
and_ 且
not_ 非
e) 分页
paginate对象
pages 总页数
total 总条数
has_prev 是否有上一页
has_next 是否有下一页
iter_pages() 当前一共多少页
f) 一对多 one_to_many Foreignkey
【例如班级--学生, 一个班级有多个学生】
在many的model中定义含Foreignkey的字段:
例:s_g = db.Column(db.Integer, db.Foreignkey(Grade.g_id), nullable=True)
在one的model中定义relationship字段
例:students = db.relationship('Student', backref='stu', lazy=True)
1) 通过one找many: one的对象.students,结果为many的结果
2) 通过many找one: many的对象.stu,结果为one的对象
g) 多对多 many_to_many
关键字:Foreignkey、中间表、relationship
例如学生和课程:
中间表:
sc = db.Table {'sc',
db.Column('s_id',db.Integer,db.Foreignkey('Student.s_id'),primary_key=True),
db.Column('c_id',db.Integer,db.Foreignkey('Course.c_id',primary_key=True))
}
课程表需要添加:
students = db.relationship('Student',secondary=sc,backref='cour')
1) 通过学生找到所选的课程--列表:
学生的对象.cour
2) 通过课程找到选这门课的所有学生--列表:
课程的对象.students