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

一  current_app

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

1.1 激活程序上下文

  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 打印当前程序名称

  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:

    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#中还没遇到过这个东西。首先看下下面的代码:

  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来表示客户端的链接请求信息。

  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

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

  1. 用flask开发个人博客(26)—— 利用config.py配置文件动态的创建不同的Flask对象

    原文:https://blog.csdn.net/hyman_c/article/details/52877704 对配置进行封装的目的是根据不同的使用场景,给flask的app赋予不同的config ...

  2. Flask搭建个人博客网站(1)—项目规划--李渣渣(lizaza.cn)

    Flask搭建个人博客网站(1)—项目规划--李渣渣(lizaza.cn) 发布时间:2020-05-2413次浏览 前言 现在市面上又许多比较成熟的博客平台,例如:CSDN,博客园,新浪博客等!对于 ...

  3. nodejs--express开发个人博客(-)

    写完了入门笔记,开始进入开发阶段吧.基于上一节的内容,现在着手开发个人博客系统.先划分一下功能吧 /:首页 /login:登陆 /reg:注册 /post:发表文章 /logout:退出 首先规划一下 ...

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

    iOSBlogAndTools iOS开发优秀博客和软件推荐 本博客和工具列表由广大iOS开发者收集和推荐,如果大家有好的博客或者工具想要分享请点击:我要提交. 收到大家的提交后会及时收录与更新.Gi ...

  5. Django开发个人博客入门学习经验贴

    [写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...

  6. 基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  7. 如何在CSDN博客自定义栏目中添加“给我写信”

    在"自定义栏目"中添加"连接"(将自己的微博,QQ空间和CSDN博客关联起来)很多人都做过.但是添加"给我写信"这个功能,用的好像不太多.此 ...

  8. flask实战-个人博客-虚拟环境、项目结构

    个人博客 博客是典型的CMS(Content Management system,内容管理系统),通常由两部分组成:一部分是博客前台,用来展示开放给所有用户的博客内容:另一部分是博客后台,这部分内容仅 ...

  9. Flask 学习 十 博客文章

    提交和显示博客文章 app/models.py 文章模型 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer ...

随机推荐

  1. 在ajax请求体外得到请求 数据

    function sendAjax() { $.ajax({ type: "post", url: "/flow/process/trace.afca?pid=" ...

  2. 深入浅出MFC--第一章

    Windows程序的生与死 当使用者按下系统菜单中的Close命令项,系统送出WM_CLOSE.通常程序的窗口函数不拦截次消息,于是DefWindowProc函数处理它.DefWindowProc收到 ...

  3. 纯css3实现的win8加载动画

    今天给大家分享一款纯css3实现的win8加载动画.在这款实例中动画效果完全由css3实现.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <div class=&quo ...

  4. [内核]procfs和sysfs

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/ 使用 sys 文件系统访问 Linux 内核 sysfs 的历史其与 proc 的 ...

  5. Linux下protobuf的编译与安装

    1.下载源码 首先,从github上下载protobuf的源码,地址:https://github.com/google/protobuf,我选择下载2.5.0版本. 2.编译protobuf 将下载 ...

  6. RegisterStartupScript 后退重复提示解决方法

    我在后台调用RegisterStartupScript注册脚本,提示用户是否要跳转到另外一个页面,可是问题就来了,跳转到另外一个页面后,一旦用户后退,原来的页面就会又提示脚本信息, 后来自己想了想,用 ...

  7. 关于Unity中场景视图的使用

    1.在任何状态下,按下鼠标中键可以切换到手掌的那个状态,可以移动当前场景 2.在手掌的那个状态,按住鼠标左键是移动场景视图,右键是视角绕着摄像机移动,按住alt+鼠标左键,是绕着指定物体旋转视角 3. ...

  8. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...

  9. hdu 2105:The Center of Gravity(计算几何,求三角形重心)

    The Center of Gravity Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  10. 【转】关于OnPaint的工作机制

    转载出处:http://blog.csdn.net/foreverhuylee/article/details/21889025 用了两年的VC++,其实对OnPaint的工作原理一直都是一知半解.这 ...