flask蓝图,cbv,python中的redis操作
flask蓝图目录结构
1.创建manager.py的文件
2.创建一个app01包
3.包中创建static 静态文件
4.包中创建templates html模板文件
5.包中创建views视图文件夹
6.在views视图中创建一个users的蓝图py文件
7.在视图文件中编写蓝图相应的创建代码
8.在__init__中创建一个函数,并在函数内完成flask app创建等代码. 并将实例化好的app返回
9.在manager中导入__init__的函数,并实例化一个app.并且允许
view蓝图文件(第六步)
from flask import Blueprint #从flask导入蓝图
user =Blueprint("user",__name__) #实例化一个蓝图对象,第一参数为蓝图名,第二个为__name__
@user.route("/login") #flask 装饰圈路由
def login(): #flask 路由函数
return "login成功" #返回
__init__中创建函数(第八步)
from flask import Flask #导入Flask ---注意大小写
from app1.views.user_view import user #导入视图类写的
def create_app(): #自定义创建flask函数
app=Flask(__name__) #实例化一个app
app.config['DEBUG']=True #开启flask debug模式。修改代码自动重启
app.register_blueprint(user) #注册蓝图
return app #返回实例化的app
manage中(第九步-)
from app1 import create_app #从app中导入自定义的创建flask 的函数
app=create_app() #app获得 函数中的实例化对象
if __name__ == '__main__':
app.run() #实例化的run方法运行
flask CBV
from flask import views
class Login(views.MethodView): ---> #创建class类
def get(self): ---> #get方法
return 'get 200ok'
def post(self): ---> #post方法
return "post 200ok"
#设置cbv的路由.(路径,view_func=Login.as_view(name='自定义名'))--->自定义名和endpoint类似,全views唯一
app.add_url_rule('/login1',view_func=Login.as_view(name='login'))
["get", "post", "head", "options", "delete", "put", "trace", "patch"]
cbv支持的方式. 并且可以在源码中自己添加.可完成自定义反扒机制的目的
监听,端口
0.0.0.0 ->所以ip都可以作为入口ip
5000 ->端口 对应应用程序
包 -> 应用程序
应用层 ---> 应用层
flask全程回顾
flask request
request.form #获取formdata中数据
request.args #获取url中的数据
request.data #获取原始数据 content-type 中没有form字眼
request.json #获取content-type:application/json -->字典
request.files #获取请求中的文件数据Filestorage 对象 --->save(储存路径)
request.method #获取请求方式 GET,POST,DELETE,PUT
request.path #获取请求路径,路由地址
request.host_url #获取请求host地址
request.cookie #获取cookie对象
request.headers #获取请求头中的数据
request.enciron #使用wsgi的原始数据
flask response
1 "" #返回字符串.
2. render_templates("模板名称") --->默认模板存放路径templates
3.redirect("/路由地址") #响应头中:location:http://url/路由地址
4.send_file() #打开并返回文件内容.自动识别文件类型.content-type:文件类型
5.jsonfy(dict) #返回标准格式的JSON格式字符串.响应头中 content-type:application/json
flask 中的session
from flask import session
如果要使用session.需要再application.secret_key="字符串" ---> 设置密钥
即:app.config['SECRET_KET']="字符串"
session['user'] =123 #设置session
使用session取值时,使用get(). 如果使用session[] 取值,如果不存在会报(keyerror错误)
flask 中session 交由客户端保管机制:
正:
1.session['user']= "123" #设置密钥
2.序列化session 字符串
3.挺高SECRET_KEY 加密字符串(加密算法)
4.cookie中加入 {SESSION_COOKIE_NAME}:SECRET_KEY 加密字符串
反:
1.cookie 获取{SESSION_COOKIE_NAME}:SECRET_KEY
2.通过SECRET_KET 解密,字符串,解密算法
3.反序列化
4.session.get("user")
flask中的路由
fbv增加路由:
@app.route("/")
app.add_url_rule
cbv增加路由:
app.add_url_rule
endpoint app 中是唯一的.路由和视图函数之间的桥梁
flask初始化
app=Flask(__name__)
template_folder #模板存放路径(原理:os.path.join(root_path,template_folder))
static_folder #静态文件存放路径
static_url_path #静态文件访问路径 一般情况:"/{static_folder}"
~~~
flask配置
app.deflaut_config 查看默认配置
蓝图
蓝图就是不能run 的flask实例
蓝图中,没有config对象的
特殊装饰器
@app.before_request #在请求进入视图函数之前
@app.after_request #在响应和客户端之前
正常:be1 -> be2-> 视图函数 ->af2 -af1
异常:be1 ->异常 ->af2 ->af1
@app.errorhandler(4xx,5xx) #重定义错误信息
@app 可以是 @bp. 蓝图对象
cbv
参上
flask第三方组件之 flask-session
flask的session:
交由客户端保管机制.安全性相对较差 .
优势是:不占用一点服务器的空间
flask-session 相对类似于 -djangosession
session 存放于->redis (在内网使用)
操作
导入session,需要在config之后,在蓝图导入之前
def create_app():
app=Flask(__name__)
app.config['DEBUG']=True
-------------------------------------
Session(app)
------------------------------------
app.register_blueprint(user)
return app
设置session配置文件
def create_app():
app=Flask(__name__)
app.config['DEBUG']=True
app.config['SESSION_TYPE']='redis' #设置session配置文件的session_type为redis
Session(app)
app.register_blueprint(user)
return app
如果需要连接远程redis
在Session(app) 之前添加设置:
app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379, db=15)
python中操作redis
导入模块
from redis import Redis
实例化
rdb=Redis()
不在本机时,需要指定host,port,db
rdb=Redis(host='127.0.0.1',port=6379,db=15)
设置key
rdb.set("key","value")
取值
rdb.get("key")
redis存储字典
将字典通过json序列化,然后存储在redis中.
取出后再使用json反序列化
d=json.dumps(d)
d=json.loads(d)