zoukankan      html  css  js  c++  java
  • 用flask开发个人博客(4)—— flask中4种全局变量

    https://blog.csdn.net/hyman_c/article/details/53512109

    一  current_app

            current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法:

    1.1 激活程序上下文

    [python] view plain copy
    1. >>> from test import app  
    2. >>> from flask import current_app  
    3. >>> from flask import g  
    4. >>> ctx=app.app_context()  
    5. >>> ctx.push()  

            app.app_context()为flask程序的上下文,简单说来就是flask程序需要运行的环境变量等等.ctx.push()是激活上下文的操作,类似的,如果我们想要回收上下文,用ctx.pop()

    1.2 打印当前程序名称

    [python] view plain copy
    1. >>> current_app.name  
    2. 'test'  

    二  g变量

            g作为flask程序全局的一个临时变量,充当者中间媒介的作用,我们可以通过它传递一些数据,下面的例子,通过g传递了一个名字叫做"Hyman",使用g之前也需要激活程序上下文:

    1. >>> g.name='Hyman'  
    2. >>> g.name  
    3. 'Hyman'  

    三 request对象

            请求对象,封装了客户端发送的HTTP请求的内容.可参照<<用flask开发个人博客(2)—— Flask中的请求对象request>>  .

    四 session

            用户会话,用来记住请求(比如前后一个GET请求和一个POST请求)之间的值,从数据格式上来说它是字典类型。它存在于连接到服务器的每个客户端中,属于私有存储,会保存在客户端的cookie中。如下面的代码,用于重定向url:

    [python] view plain copy
      1. @app.route('/', methods=['GET','POST'])  
      2. def index():  
      3.     form = NameForm()  
      4.     if form.validate_on_submit():  
      5.         session['name']=form.name.data  
      6.         return redirect(url_for('index'))  
      7.     renturn render_template('index.html',form=form,name=session.get('name')) 

    ------------------------------------------------

    前端请求form:

    1. <form action="/user/add" method="get">  
    2.         <input type="text" name="username" value="111">  
    3.         <input type="submit" value="提交">  
    4. </form>  

    前端提交时,后端接收参数,可以把登录数据保存在session中:

    1. @user.route('/add',methods=['GET'])  
    2. def add():  
    3.     username=request.values.get('username');  
    4.     session['username']=username  
    5.     return session['username']  

    其中获取表单数据使用

    1. request.values.get('username');  

    复选框参数获取:

    1. s_option =  request.values.getlist("s_option")  
    2. for s in s_option:  
    3.     pass  

    使用@before_request拦截请求url

    1. @user.before_request  
    2. def before_user():  
    3.     if 'username' in session:  
    4.         return '已登录'  
    5.         pass  
    6.  else:  
    7.         return '未登录'  

    如果已经登录,通过拦截,若果未登录,返回提示信息或跳转到登录页面

     ------------------------------------------------------------------------------------------------

    在介绍flask中的request之前,先简单介绍下python中的ThreadLocal对象。ThreadLocal,故名思义,就是线程中的全局变量,最近才接触这个概念,之前在C++和C#中还没遇到过这个东西尴尬。首先看下下面的代码:

            

    [python] view plain copy
    1. import threading  
    2.   
    3. localobj=threading.local()  
    4.   
    5. def threadfunc(name):  
    6.     localobj.name=name  
    7.     print 'localobj.name is %s' %name  
    8.   
    9. if __name__=='__main__':  
    10.     t1=threading.Thread(target=threadfunc,args=('Hyman',))  
    11.     t2=threading.Thread(target=threadfunc,args=('liuzhihui',))  
    12.     t1.start()  
    13.     t2.start()  
    14.     t1.join()  
    15.     t2.join()  


         localobj就是一个Threadlocal对象,他对于每个线程来说是全局的,但是对于不同线程之间又可以保持不同。而flask中的请求对象request就由是这类对象。在多线程服务器中客户端每建立一个链接,服务器就创建一个线程,每个线程中就会有一个request来表示客户端的链接请求信息。

    [python] view plain copy
    1. from flask import Flask  
    2. from flask import request  
    3.   
    4. app=Flask(__name__)  
    5.  
    6.  
    7. @app.route('/')  
    8. def index():  
    9.     user_agent=request.headers.get('User_Agent')  
    10.     return 'user_agent is %s' %user_agent  
    11.   
    12. if __name__=='__main__':  
    13.     app.run()  

         启动浏览器时,输入 localhost:5000:

    Github位置:
    https://github.com/HymanLiuTS/flaskTs

    克隆本项目:
    git clone Git@github.com:HymanLiuTS/flaskTs.git
    获取本文源代码:
    git checkout FL02

  • 相关阅读:
    实用机器学习 跟李沐学AI
    Explicitly drop temp table or let SQL Server handle it
    dotnettransformxdt and FatAntelope
    QQ拼音输入法 禁用模糊音
    (技术八卦)Java VS RoR
    Ruby on rails开发从头来(windows)(七)创建在线购物页面
    Ruby on rails开发从头来(windows)(十三)订单(Order)
    Ruby on rails开发从头来(windows)(十一)订单(Order)
    新员工自缢身亡,华为又站到了风口浪尖
    死亡汽油弹(Napalm Death)乐队的视频和来中国演出的消息
  • 原文地址:https://www.cnblogs.com/fengff/p/9087488.html
Copyright © 2011-2022 走看看