flask综合整理2

Posted lzqrkn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask综合整理2相关的知识,希望对你有一定的参考价值。

session功能

首先我们知道session可以理解是一把钥匙,它存在在服务器上,其实在flask中也有session

1.系统自带的session

from flask import session
import json
app=Flask(__name__,template_folder=templates,static_path=/static/,static_url_path=/static/)
app.debug=True
#设置session加密
app.secret_key=sjehfjeefrjewth43u  
#指定json编码格式 如果为False 就不使用ascii编码,
app.config[JSON_AS_ASCII]=False  
app.config[JSONIFY_MIMETYPE] 
#指定浏览器渲染的文件类型,和解码格式;="application/json;charset=utf-8" 

@app.route(/login/,methods=[GET,POST])
def login():
    msg = ‘‘
    if request.method==POST:
        name=request.values.get(user)
        pwd=request.values.get(pwd)
        if name ==zhanggen and pwd==123.com:
            session[user]=name  #设置session的key value
            return redirect(/index/)
        else:
            msg=用户名或者密码错误
    return render_template(login.html,msg=msg)

@app.route(/index/,methods=[GET,POST])
def index():
    user_list = [张根, egon, eric]
    user=session.get(user)           #获取session
    if user:
        user=[alex,egon,eric]
        return jsonify(user_list)
    else:
        return redirect(/login/)

if __name__ == __main__:
    app.run()

Flask自带session功能

2.第三方session插件

安装 pip install flask-session
from flask import session, Flask,request,make_response,render_template,redirect,jsonify,Response

#引入第三方session
from flask.ext.session import Session 
import json
app=Flask(__name__,template_folder=templates,static_path=/static/,static_url_path=/static/)
app.debug=True

#设置session加密
app.secret_key=sjehfjeefrjewth43u  
app.config[JSON_AS_ASCII]=False  #指定json编码格式 如果为False 就不使用ascii编码,
app.config[JSONIFY_MIMETYPE] ="application/json;charset=utf-8" #指定浏览器渲染的文件类型,和解码格式;

app.config[SESSION_TYPE]=redis

from redis import Redis        #引入连接 redis模块
app.config[SESSION_REDIS]=Redis(host=192.168.0.94,port=6379) #连接redis
Session(app)

@app.route(/login/,methods=[GET,POST])
def login():
    msg = ‘‘
    if request.method==POST:
        name=request.values.get(user)
        pwd=request.values.get(pwd)
        if name ==zhanggen and pwd==123.com:
            session[user]=name  #设置session的key value
            return redirect(/index/)
        else:
            msg=用户名或者密码错误
    return render_template(login.html,msg=msg)

@app.route(/index/,methods=[GET,POST])
def index():
    user_list = [张根, egon, eric]
    user=session.get(user)           #获取session
    if user:
        user=[alex,egon,eric]
        return jsonify(user_list)
    else:
        return redirect(/login/)

if __name__ == __main__:
    app.run()

把session存到redis

蓝图

蓝图你可以理解为是一个启动不了了的flask的实例,不多说上实例自己看

这个是我们的蓝图目录

技术分享图片

#views.py文件中写

from flask import Blueprint  # 导入 Flask 中的蓝图 Blueprint 模块
from flask import render_template

sv = Blueprint("sv",
               __name__,
               template_folder="sv_template",  # 每个蓝图都可以为自己独立出一套template模板文件夹,如果不写则共享项目目录中的templates
               static_folder="sv_static"  # 静态文件目录也是可以独立出来的
               )  # 实例化一个蓝图(Blueprint)对象(切记!!!!!!注册!!!!!!!!!!!!!!!!)


@sv.route("/svlist")
def view_list():
    return render_template("svlist.html")
#s4app.html中写入


from flask import Blueprint  # 导入 Flask 中的蓝图 Blueprint 模块
from flask import render_template

sv = Blueprint("sv",
               __name__,
               template_folder="sv_template",  # 每个蓝图都可以为自己独立出一套template模板文件夹,如果不写则共享项目目录中的templates
               static_folder="sv_static"  # 静态文件目录也是可以独立出来的
               )  # 实例化一个蓝图(Blueprint)对象


@sv.route("/svlist")
def view_list():
    return render_template("svlist.html")

这样我们打开浏览器看到的就是我们的页面,这就是蓝图,他有自己的模板文件,只要被注册了就一定会生效,当然了,蓝图内部的视图函数route不雅重复,这是前辈踩的坑,不信你自己试试

message (闪现)

message是一个基于Session实现的用于保存数据的集合,其特点是:一次性。

特点:和labada匿名函数一样不长期占用内存

from flask import Flask,request,flash,get_flashed_messages

app = Flask(__name__)
app.secret_key = some_secret


@app.route(/set/)
def index2():
    flash(Disposable)    #在message中设置1个个值
    return ok

#---------------------------------------------------------------------------------

@app.route(/)
def index1():
    messages = get_flashed_messages() #获取message中设置的值,只能获取1次。(1次性)
    print(messages)
    return "Index1"






if __name__ == "__main__":
    app.run()

flask_message

中间件

flask也有中间件功能和Django类似,不同的是使用的是使用3个装饰器来实现的;

1.@app.before_first_request :请求第1次到来执行1次,之后都不执行;

[email protected]_request:请求到达视图之前执行;(改函数不能有返回值,否则直接在当前返回)

[email protected]_request:请求 经过视图之后执行;(最下面的先执行)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, Request, render_template

app = Flask(__name__, template_folder=templates)
app.debug = True


@app.before_first_request  #第1个请求到来执行
def before_first_request1():
    print(before_first_request1)


@app.before_request #中间件2
def before_request1():
    Request.nnn = 123
    print(before_request1)  #不能有返回值,一旦有返回值在当前返回


@app.before_request
def before_request2():
    print(before_request2)



@app.errorhandler(404)
def page_not_found(error):
    return This page does not exist, 404



@app.route(/)
def hello_world():
    return "Hello World"





@app.after_request #中间件 执行视图之后
def after_request1(response):
    print(after_request1, response)
    return response


@app.after_request #中间件 执行视图之后 先执行 after_request2
def after_request2(response):
    print(after_request2, response)
    return response

if __name__ == __main__:
    app.run()

 

 参考地址:https://www.cnblogs.com/heshun/p/10256443.html

以上是关于flask综合整理2的主要内容,如果未能解决你的问题,请参考以下文章

Flask 1.0 终于发布,放弃支持 Python 2.6 和 Python 3.3

时隔 8 年,Flask 1.0 终于发布,放弃支持 Py 2.6 和 3.3

flask_综合认证

Flask框架学习整理——从零开始入门Flask

IOS开发-OC学习-常用功能代码片段整理

SQL数据分析之子查询的综合用法和案例题耐心整理