Flask CBV,session和redis,以及总结

Flask CBV,session和redis,以及总结

一丶Flask CBV

# flask cbv 只针对类视图

### 使用cbv
from flask import views # 导入cbv的视图基类 ,views是一个py文件,里面包含3个类

class Login(views.MethodView): # 继承CBV视图基类的最高类
    # ?  为什么定义 get, 默认是通过请求方式找到对应 类函数视图处理
    def get(self):
        return "GET 200 OK!"

    def post(self):
        return "POST 200 OK!"
    
### 需要将CBV添加到路由
	# view_func 中的as_view方法 是把类函数转换成视图函数,也就是 某个请求对应的某个具体函数
app.add_url_rule('/login',view_func=Login.as_view(name="login"))

二丶监听 端口

# 理解为主
"0.0.0.0" 5000
"192.168.14.26" 5000
端口 - 应用程序
包 -> 应用程序

IOS 5层中的最高层
应用 					- 									应用
浏览器-9528		目的:(b"HTTP 1.1 / GET\r\n")			192.168.14.26:9527

服务器接收字符串 b"HTTP 1.1 / GET\r\n"
网卡 b"HTTP 1.1 / GET\r\n" - 操作系统 我这里有一段数据你看看吧
操作系统 解包 - 端口 9527 应用程序 - 9527 这个数据包你看看
WSGI:9527 - 收到 b"HTTP 1.1 / GET\r\n" 
Flask - WSGI 帮我把这些数据转换成 对象 environ ,这个对象可以 打点儿调用属性
Flask 收到 WSGI 转换的 environ对象 request_class Flask Request 样式
Django request.POST 
Flask request.form 


三丶Flask回顾

Flask Request

request.form # 获取formData中的数据
request.args  # 获取 地址URL中的数据
request.data  # 获取原始请求体数据 , content-type 中没有form 的字眼, 类型是字节类型
request.json  # 获取 content-type:application/json 数据,直接返回字典
request.fiels # 获取请求中的文件数据 FileStorge 对象, 可以直接调用save(文件路径)保存

request.method # 获取请求方式
request.path  # 获取请求路径 ,路由地址
request.host_url # 获取请求host地址	
request.cookies  # 获取Cookie的对象
request.headers  # 获取请求头中的数据

Flaks Response

""      # HTTPResponse
render_templates(模版名称) # 默认存储模板的路径templates
redirect('/路由地址')   # 响应头中的:location: http://url/路由地址

Flask 特殊封装
send_file('文件路径')  # 打开并返回文件内容,自动识别文件的类型,响应类型 Content-Type:响应类型
jsonify(dict)  # 返回标准的json格式数据,响应头的Content-Type:application/json

Flask Session

from flask import session

# 必须设置 secret_key 秘钥
application.secret_key = "$%^&*()&^%$%^&*"
app.config["SECRET_KEY"] = "$%^&*()&^%$%^&*"

# 设置session的值
session["user"] = 123

if session.get("user") ---  session["user"] KeyError


#### session 机制理解
交由客户端保管机制

1.session["user"] = "123"
2.序列化session 字符串
3.通过 SECRET_KEY 加密字符串 加密算法
4.cookie中加入 {SESSION_COOKIE_NAME}:SECRET_KEY 加密字符串
    5.返回客户端

    反:
    1.Cookie获取{SESSION_COOKIE_NAME}:SECRET_KEY
        2.通过 SECRET_KEY 解密 字符串 解密算法
        3.反序列化 字符串 字典 - session
        4.session.get("user")

Flask 路由

# 函数 路由
@app.rout("/")
def index():
	pass

* endpoint  # 是app中唯一的 路由和视图函数之间的桥梁
* methods   # 允许请求的方式 ['GET','POST','DELETE','PUT']
* 动态参数路由
	* "/index/<page>"
	* "/look/<xjj>/<picture>"
    def look(xjj,picture):
         pass
* defaults ={"nid":1}  # 视图函数默认参数
* strict_slashes   # 严格遵守路由匹配规则,True 和False ,就是以"/"结尾
* redirect_to # 永久重定向 301 308

# 类 路由
app.add_url_rule("/login",view_func=Login.as_view(name="login"))

Flask 初始化

app=Flask(__name__)

template_folder  # 模板存放路径,os.path.join(root_path,template_folder) ,root_path是当前app对象的目录
static_folder 	# 存放静态文件路径
static_url_path   # 静态文件访问路径,默认是"/{static_folder}"


## import_name # __name__ 锁定当前文件的目录,保证文件唯一
## root_path # 当前application的所在目录 由import_name自动创建
host_matching # 主机位 匹配 config.server_name
static_host # 远程静态文件服务 "{static_host}/{static_folder}"
subdomain_matching  # 支持子域名的主机位匹配
instance_path  # 另一个Flask实例导入
instance_relative_config  # 另一个FlaskConfig导入

Flask 配置 config

app.config  # Flask Config对象
app.debug = True  # 开启debug模式
app.config["DEBUG"] = True  # 开启debug模式
DEBUG 		# 开发环境 log级别低 		重启代码错误透传
TESTING		# 测试环境 log级别较高	
SECRET_KEY   #  开启Session序列化
SESSION_COOKIE_NAME # 在Cookie Session名称 ,默认是session
SESSION_COOKIE_HTTPONLY # 是否只在HTTP请求下开启 session
JSONIFY_MIMETYPE  # 更改 jsonify 时的 Content-Type


### 导入类配置  app.config.from_object() 方法
class DebugConfig(object):
			DEBUG = True
			SECRET_KEY = "%^&*()_"
		
app.config.from_object(DebugConfig)

Flask 蓝图

# 蓝图是不能 run的Flask 实例
# 蓝图中没有Config对象
# 蓝图的作用是隔离应用,隔离路由

# 1.声明蓝图
from flask import Blueprint
bp = Blueprint("蓝图名称全Flask示例唯一",__name__)
# 2. 蓝图路由
@bp.route("application路由一致",url_prefix="/url前缀")
def bp_index():
	pass

# 3. 注册蓝图对象 
app.register_blueprint(bp)

Flask 特殊装饰器

@app.before_request # 在请求进入视图函数之前
@app.after_request # 在响应客户端之前
@app.before_first_request # 启动flask,第一次请求进入视图函数前,只执行一次
@app.errorhandler(404错误参数)  # 重定义 错误信息
def error404(errorMessage):
	return "404"

Flask CBV

👆

四丶 Flask 三方组件 Flask-Session

# 原生session缺点	
	# 交由客户端COOKIE保管机制,安全性相对较差
	
### Flask-Session
	解决 上述问题, 生成和DjangoSession的数据
### 存储方式有 redis,mysql,memched等


# 操作  Flask-Session
# 1. 导入
	from flask_session import Session
# 2. 设置sessionType
    app.config["SESSION_TYPE"] = "redis"
    # 指定redis实例
    app.config["SESSION_REDIS"] = Redis(host="127.0.0.1",port=6379,db=15)
    
# 3. 将flask application的app对象放入到 Session()中,重新实例化.
	 Session(app)
# 4. 与 原生session使用方式相同
	from flask import session
	session['user']="123"
    
    
#### 第三方组件,就是在原来的session基础上添加几种不同的存储session方式,有服务端的redis,数据库,缓存,文件等
#### 在config添加许多的session配置,得到的还是原来的 SecureCookieSessionInterface() 原生session
 # app.session_interface = SecureCookieSessionInterface()  # 原生 Session

#### 三方组件存活 在 application 配置后 , 导入蓝图前


五丶Flask 操作 redis

### redis 补充
	# redis一般 不放在公网上使用,内网使用较多,
	# redis存在bug,通过用户态,访问到内核态,直接攻击服务器.
	
# 1.下载 redis
pip3 install redis
# 2. 导入redis
from redis import Redis
# 3. 实例化redis对象,
rds=Redis() # 默认是本地redis,可以指定host,和db数据库,port端口

# 4. redis 经常和 json 和pickl模块使用
	# redis存储的数据 都将是, 字符串和数值类型(不是redis的五种数据类型)

# 5. redis 存字典
import json
d={'k':'v'}
rds.set("pyflaskredis",json.dumps(d)) # 序列化 , 存储
print(json.loads(rds.get('pyflaskredis'))) # 取出 ,反序列化

posted @ 2021-05-23 20:52  染指未来  阅读(83)  评论(0编辑  收藏  举报