• 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次,之后都不执行;

    2.@app.before_request:请求到达视图之前执行;(改函数不能有返回值,否则直接在当前返回)

    3.@app.after_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

  • 相关阅读:
    fir.im Weekly
    【转】UITextView的使用详解
    UITextView textViewShouldEndEditing
    【转】 iOS 两种方法实现左右滑动出现侧边菜单栏 slide view
    【转】 UITableView 的indexPath
    【转】 iOS Provisioning Profile(Certificate)与Code Signing详解
    【原】AVAudio录制,播放 (解决真机播放音量太小)
    iOS开发知识点:理解assign,copy,retain变strong
    【转】 NSArray copy 问题
    UITableView中的visibleCells的用法(visibleCells帮上大忙了)
  • 原文地址:https://www.cnblogs.com/lzqrkn/p/10277277.html
Copyright © 2020-2023  润新知