装饰器
- 可以让其他函数在不需要做任何代码变动的前提下增加额外功能
框架的核心
- 只提供路由和视图
面向对象思想:封装,继承,多态。
重量级框架:Django
额外的功能:模型类,管理后台
优点:开发速度快
缺点:业务复杂,需求变化大
轻量级框架:Flask
通过扩展来实现Django功能
优点:可以根据开发者能力,提高开发者能力
缺点:开发速度可能没有Django快
Jinja2 模板引擎
Werkzeug WSGI 工具集 (管视图)
IP:标记网络设备
端口:标记进程
DNS: 把域名解析成IP
- 浏览器-----DNS解析--------Tcp三次握手
wsgi:web服务器和框架的桥梁一样
uwsgi:web服务器和框架之间的数据协议(约定好传什么数据)
uWSGI:实现了uwsgi协议的web服务器
nginx:
负载均衡: 将数据平均的分给服务器去运行 (雨露均沾)
正向代理:(代理用户)知道目标存在
反向代理:(代理服务器)
动静分离:有静态资源的话就不会走后面的web服务器,找到静态后直接返回给浏览器
动态资源的话就是正常流程
HTTP协议
超文本传输协议,http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态;客户端与服务器端的一次通信,就是一次会话
应用层
概念
请求头: User-Agent、Cookie、Referer (页面跳转处)
响应头:
状态码:
* 200(OK 请求成功)。
* 301: 永久重定向
* 302: 临时重定向(所请求的页面已经临时转移至新的url)
* 400:错误请求,服务器无法解析请求
* 401:未授权,没有进行身份验证
* 403:服务器拒绝访问
* 404:服务器无法找到被请求的网页
* 405:请求方式不被允许
* 408:请求超时
* 500:服务器内部错误
* 501:服务器不具备完成请求的功能
* 503:服务器不可用
请求方式:GET POST
HTTPS:默认端口443
- CA证书
传输层
经典类:
-
经典类是深度优先的继承方式
新式类:
-
新式类是广度优先的继承方式
七层协议
1-物理层
2-数据链路层
3-网络层
4-传输层
5-会话层
6-表示层
7-应用层
五层协议:
应用层
传输层
网络层
数据链路层
物理层
解决错误:
1. 大概知道错误什么意思
2. 定位行数
3. 上下文 上一步操作
-
转换器本质是正则
-
path转化器能匹配
-
过滤器本质就是函数
-
过滤器本质就是函数,自定义过滤器 至少有一个参数 千万别忘记用app.jinja_env.filters注册过滤器
-
上传文件用file 记住千万要校验文件是否安全。永远别相信用户的输入
自定义转化器? 系统内部没有那种手机号之类的逻辑
步骤是什么?
1.继承BaseConverter实现
2.通过url_map的converters注册转换器
app.url_map.converters['XXX'] = XXX
request里面有很多属性,至少要记住其中比较重要的
args 用来get参数
form 用来post参数
values get和post都可以取
cookie
-
cookie的作用 保存在哪里
cookie默认是关闭浏览器就过期
设置cookie过期时间两种
指定多少秒过期
指定具体时间过期 这种能选一个
自定义响应
-
(response,status,headers)这样的数据结构,至少要有response。
-
status指定的是HTTP状态码,可以是HTTP中状态码,也可以是自定义的状态码。headers指的是额外的响应头。
-
用make_response也可以自定义响应
-
json是一种数据交互格式
json--->dict loads
dict--->json dumps
-
序列化:把对象转换成可传输或者可存储的过程叫序列化
-
反序列化:把传输的数据或存储的数据转化成对象反序列化
-
通过jsonify可以返回json数据
-
session默认过期时间就关闭浏览器就过期
-
可以通过app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(seconds=10)设置过期时间
-
session.permanent = True #默认31天后过期
删除session
session.pop('money')
del session['money']
session.clear() #全部删除了
-
可以通过flask_session把session内容存在服务器上
abort() 这里面传的状态码必须是HTTP的状态码
-
然后自定义显示状态码内容
@app.errorhandler(404)
def noufound(error):
return '服务器迷路了 ',404
SQLALchemy 他是ORM的框架
flask_sqlalchemy 只能用于flask
-
物理性删除:从磁盘抹去
-
非理性删除:isdelete 假删除
-
一对一模型,跟一对多写法是一样的,只是在添加反向引用的需要在里面加上uselist = False
-
如果使用了flask_script 运行方式也发生了改变
manager = Manager(app)
manager.run()
python3 01-Flask扩展脚本.py runserver -h 0.0.0.0 -p 5001 -d
- 让模型支持迁移操作 一定要是扩展脚本
初始化Migrate对象
Migrate(app.db)
通过manager 添加迁移命令 第一个参数是迁移命令的名字 第二个参数就是MigrateCommand
manager.add_command('db',MigrateCommand)
创建装迁移文件的文件夹
python3 01-Flask扩展脚本.py db init
生成迁移文件 -m 后面这次生成迁移文件的描述
python3 01-Flask扩展脚本.py db migrate -m 'add userinfo and usercard'py
迁移
python3 01-Flask扩展脚本.py db upgrade
如果回退的话alembic_version 里面最后一次迁移的版本号
python3 01-Flask扩展脚本.py db downgrade 你要退的迁移文件版本号
Flask-WTF功能
集成 wtforms。
带有 csrf 令牌的安全表单。
全局的 csrf 保护。
支持验证码(Recaptcha)。
与 Flask-Uploads 一起支持文件上传。
国际化集成。