用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之前也需要激活程序上下文:

[plain] view plain copy

  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:

[html] view plain copy

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

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

[html] view plain copy

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

其中获取表单数据使用

[html] view plain copy

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

复选框参数获取:

[html] view plain copy

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

使用@before_request拦截请求url

[html] view plain copy

  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. localobj=threading.local()
  3. def threadfunc(name):
  4. localobj.name=name
  5. print ‘localobj.name is %s‘ %name
  6. if __name__==‘__main__‘:
  7. t1=threading.Thread(target=threadfunc,args=(‘Hyman‘,))
  8. t2=threading.Thread(target=threadfunc,args=(‘liuzhihui‘,))
  9. t1.start()
  10. t2.start()
  11. t1.join()
  12. t2.join()

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

[python] view plain copy

  1. from flask import Flask
  2. from flask import request
  3. app=Flask(__name__)
  4. @app.route(‘/‘)
  5. def index():
  6. user_agent=request.headers.get(‘User_Agent‘)
  7. return ‘user_agent is %s‘ %user_agent
  8. if __name__==‘__main__‘:
  9. app.run()

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

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

克隆本项目:
git clone Git@github.com:HymanLiuTS/flaskTs.git

获取本文源代码:

git checkout FL02

原文地址:https://www.cnblogs.com/fengff/p/9087488.html

时间: 2024-10-17 15:09:27

用flask开发个人博客(4)—— flask中4种全局变量的相关文章

个人开发的博客系统上线了!!!http://blog.verysu.com

个人开发的博客系统--Su的技术博客 http://blog.verysu.com 欢迎访问!!! 使用到了Spring+SpringMVC+Hibernate

iOS开发优秀博客和软件推荐

iOSBlogAndTools iOS开发优秀博客和软件推荐 本博客和工具列表由广大iOS开发者收集和推荐,如果大家有好的博客或者工具想要分享请点击:我要提交. 收到大家的提交后会及时收录与更新.GitHub地址:https://github.com/imlifengfeng/iOSBlogAndTools iOS开发中文博客 博客名称/地址 RSS地址 博主微博 OneV's Den http://onevcat.com/atom.xml onevcat 唐巧的技术博客 http://blog

WordPress---PHP语言开发的博客平台

WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用.WordPress是一个免费的开源项目,在GNU通用公共许可证下授权发布.目前最新版本为2014 年4月25日WordPress 3.9 版.WordPress被认为是Michel Valdrighi所开发的网志平台b2/cafelog的正式继承者."WordPress"这个名字出自Christine

iOS开发学习博客

不断学习的博客 王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat.com池建强的博客: 池建强,70后程序员,Blogger.98年毕业,先后就职于洪恩软件.RocketSofeware和用友软件工程公司(后更名为瑞友科技),现任瑞友科技IT应用研究院副院长.该博客最初每天发送一条Mac技巧,不过目前已经形成了一种技术和人文结合的风格,时而随笔,

【Python开发】博客的使用指南

博客的分类: 随笔:所有人在博客中都可以找到: 文章:别人找不到,可以通过URL访问: 日志:别人找不到,URL也不能访问: 博客插入代码的两种格式: "插入代码(推荐)"(左): 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # author: Kevin.Wang 4 # time : 2018/7/17 5 6 print('Hello') "插入代码"(右): #!/usr/bin/env python

一篇博客分清shell中的状态返回值-return-break-continue-exit

一篇博客分清shell中的状态返回值-return-break-continue-exit 一.break.continue.exit.return的区别和对比 条件与循环控制及程序返回值命令知识表 命令 说明 break n 如果省略n,则表示跳出整个循环,n表示跳出循环的层数 continue n 如果省略n,则表示跳出本次循环,忽略本次循环剩余代码,进入循环的下一次循环.n表示退到第n层继续循环 exit n 表示退出当前shell程序,n为上一次程序执行的状态返回值,n也可以省略,在下一

C#控制台基础 正则表达式,regex,webclient下载博客园网页中的一张图片

1 网页图 这网页就一张图片,新手入门,找个简单一些的. 2 代码 1 正则表达式,regex,webclient下载博客园网页中的一张图片 2 3 4 using System; 5 using System.Collections.Generic; 6 using System.IO; 7 using System.Linq; 8 using System.Net; 9 using System.Text; 10 using System.Text.RegularExpressions; 1

教育博客在实践中实际上已经发展成为记录教师专业成长

教育博客在实践中实际上已经发展成为记录教师专业成长.发布课题研究成果和反映学校发展历程的工作日 志.网络文集和多媒体成长档案袋.教师可以通过教育博客来记录自己的教育教学实况,跟踪自己的专业发展轨迹,分析进步,查找不足,积累和分享自己的成功经 验和教育智慧:同时,教师也可通过教育博客来收藏.整理自己所需的学习资源,了解教学研究的动态.建立教育博客,可使教师通过开放自己的教学材料.实践体 验和研究心得,在与专家学者.教研员以及更多一线教师乃至学生的互动交流中,逐步成为教学知识的生产者和课程资源的承载

转载:唐磊的个人博客《python中decorator详解》【转注:深入浅出清晰明了】

转载请注明来源:唐磊的个人博客<python中decorator详解> 前面写python的AOP解决方案时提到了decorator,这篇文章就详细的来整理下python的装饰器--decorator. python中的函数即objects 一步一步来,先了解下python中的函数. def shout(word='hello,world'):     return word.capitalize() + '!'print shout()#输出:Hello,world!#跟其他对象一样,你同样