Flask笔记

装饰器

  • 可以让其他函数在不需要做任何代码变动的前提下增加额外功能

框架的核心

  • 只提供路由和视图

面向对象思想:封装,继承,多态。

重量级框架: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 一起支持文件上传。
国际化集成。

你可能感兴趣的:(Flask笔记)