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. Pyhton 列表转字典

    1.一个list 2.两个list

  2. FreeRTOS 二值信号量,互斥信号量,递归互斥信号量

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节讲解 FreeRTOS 任务间的同步和资源共享机制,二值信号量. 二值信号量是计数信号量的一种特殊形式 ...

  3. dropload.js下拉加载更多

    项目中有用到下拉加载更多的地方,去网上找了一个插件,地址:http://ons.me/526.html总体还是不错的,可能自己不是特别了解这个插件,做项目时,也是遇到了无数问题.项目中要用的是两个ta ...

  4. 在eclipse上Checkstyle的安装和使用

    1. 概述 随着中心的代码规范的建立和实施,项目组对代码规范要求,以及软件工程师们对自身代码的编写规范重要性的认知,“代码规范”已经成为了中心的一个“热词”.然后怎么才能写出有规范的代码,怎么才能养成 ...

  5. Unix系统编程()虚拟内存管理

    在之前学到过进程的内存布局中忽略了一个事实:这一布局存在于虚拟文件中. 因为对虚拟内存的理解将有助于后续对fork系统调用.共享内存和映射文件之类的主题阐述,这里还要学习一下有关虚拟内存的详细内容. ...

  6. 浏览器中F5和CTRL F5的行为区别

    前言 在印象中,浏览器中的F5和刷新按钮是一样的效果,都是对当前页面进行刷新:Ctrl-F5的行为也是刷新页面,但是会清除浏览器缓存,这在前端调试时候会常用.二者真正的区别是什么呢?在stackove ...

  7. 你有自己的Web缓存知识体系吗?

    赵舜东 江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作.曾带团队负责国内某电商的运维工作,<saltstack入门与实践>作者,某学院高 ...

  8. HBase源码学习系列

    转自:http://www.cnblogs.com/cenyuhai/tag/hbase%E6%BA%90%E7%A0%81%E7%B3%BB%E5%88%97/ (mark) hbase源码系列(十 ...

  9. 在MVC设计模式中,JavaBean的作用是。(选择1项)

    A.Controller B.Model C.业务数据的封装 D.View 解答:B

  10. Excel随机生成数据

    CONCATENATE函数是一个文本连接函数,非常简单,和&的效果一样. CONCATENATE是一个文本连接函数 语法:CONCATENATE(text1,text2,text3...... ...