Flask 高效开发实战-flask1

在模板渲染中,使用Markup转换变量中的特殊字符

from flask import Markup

Markup函数对字符串进行转移处理再传递给render_template()函数

在浏览器中显示标签代码

路由地址的反响生成

通过函数名获得与其绑定的Url地址

需要使用url_for函数进行反向解析

with app.text_request_context()
    print(url_for(‘f_root‘)) # 输出:/
app.text_request_context()方法告诉解释器为在其作用域中的代码模拟一个HTTP请求上下文,使其好像被一个HTTP请求所调用

使用Context上下文他是服务器端获得应用及请求相关信息的对象1、会话上下文会话(session)是一种客户端与服务器端保持状态的解决方案,会话上下文是用来实现这种解决方案的存储结构
from flask import Flask,session
from datetime import datetime

app = Flask(__name__)

app.secret_key = ‘SET_ME_BEFORE_USE_SESSION‘

@app.route(‘/‘)
def hello_world():
    return ‘Hello World!‘

@app.route(‘/write_session‘)
def wirteSession():
    session[‘key_time‘]=datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘)# 将当前时间保存在Session中
    return session[‘key_time‘] # 返回当前时间
@app.route(‘/read_session‘)
def readSession():
    return session.get(‘key_time‘)# 获取上次调用wirteSession时写入的时间并返回

除了正常的数据保存和读取,flask.session对象还维护自身的状态,通过

new 判断本次请求的Session是否时新建的

modified 判断本次请求中是否修改过Session键值

@app.route(‘/write_session‘)
def wirteSession():
    session[‘key_time‘]=time.time() # 将当前时间保存在Session中
    return session.modified # 因为之前进行了Session设置,所以判断本次请求是否被修改过(modified)返回TRUE

应用全局对象

from flask import Flask,g

class MYDB():
    def __init__(self):
        print(‘一个数据库链接已经建立‘)

    def close(self):
        print(‘数据库已经关闭‘)

def connect_to_database():
    return MYDB()

def get_db():
    db = getattr(g,‘_database‘,None)
    if db is None:
        db = connect_to_database()
        g._database = db # 存入Flask.g对象中
    return db

@app.teardown_request # 在请求结束时自动被Flask框架调用
def teardown_db(response):
    db = getattr(g,‘_database‘,None)# 从Flask.g对象中获取对象,检查是否有链接数据库对象,如果有则关闭
    if db is not None:
        db.close()
可以在请求处理函数的任何地方调用get_db()
class MYDB():
    def __init__(self):
        print(‘一个数据库链接已经建立‘)

    def close(self):
        print(‘数据库已经关闭‘)

def connect_to_database():
    return MYDB()

def get_db():
    db = getattr(g,‘_database‘,None)
    if db is None:
        db = connect_to_database()
        g._database = db # 存入Flask.g对象中
    return db

@app.teardown_request
def teardown_db(response):
    db = getattr(g,‘_database‘,None)# 从Flask.g对象中获取对象
    if db is not None:
        db.close()
def login():
    db=get_db()  # 第一次调用getdb  创建数据库链接
    session[‘has_login‘]=True
    # 使用db检查数据库中的用户名和密码
def view_list():
    if ‘has_login‘ not in session:
        login()
    db = get_db() # 第二次调用get_db()# 直接复用之前建立的链接
    # 使用db 从数据库查询数据,返回teardown_db()将会被自动调用

请求上下文

主要是在服务端获得从客户端提交的数据,包括url参数,表单数据,cookies等

from flask import Flask,request,url_for,redirect

app = Flask(__name__)

@app.route(‘/redirect_url‘)
def redirect_url():
    next = request.args.get(‘next‘) or url_for(‘index‘)
    return redirect(next)

@app.route(‘/echo_url‘)
def echo_url():
    return request.base_url

request的属性

下面是request可使用的属性,其中黑体是比较常用的。

  • form 
    一个从POST和PUT请求解析的 MultiDict(一键多值字典)。
  • args 
    MultiDict,要操作 URL (如 ?key=value )中提交的参数可以使用 args 属性:
searchword = request.args.get(‘key‘, ‘‘)
  • values 
    CombinedMultiDict,内容是formargs。 
    可以使用values替代form和args。
  • cookies 
    顾名思义,请求的cookies,类型是dict。
  • stream 
    在可知的mimetype下,如果进来的表单数据无法解码,会没有任何改动的保存到这个·stream·以供使用。很多时候,当请求的数据转换为string时,使用data是最好的方式。这个stream只返回数据一次。
  • headers 
    请求头,字典类型。
  • data 
    包含了请求的数据,并转换为字符串,除非是一个Flask无法处理的mimetype。
  • files 
    MultiDict,带有通过POST或PUT请求上传的文件。
  • environ 
    WSGI隐含的环境配置。
  • method 
    请求方法,比如POST、GET。
  • path
  • script_root
  • url
  • base_url
  • url_root 
    如果用户请求如下URL: 
    http://www.example.com/myapplication/page.html?x=y 
    以上的参数内容如下:
名称 内容
path /page.html
script_root /myapplication
base_url http://www.example.com/myapplication/page.html
url http://www.example.com/myapplication/page.html?x=y
url_root http://www.example.com/myapplication/
    • is_xhr 
      如果请求是一个来自JavaScript XMLHttpRequest的触发,则返回True,这个只工作在支持X-Requested-With头的库并且设置了XMLHttpRequest
    • blurprint 
      蓝本名字。
    • endpoint 
      endpoint匹配请求,这个与view_args相结合,可是用于重构相同或修改URL。当匹配的时候发生异常,会返回None。
    • get_json(force=False, silent=False, cache=True)
    • json 
      如果mimetypeapplication/json,这个参数将会解析JSON数据,如果不是则返回None。 
      可以使用这个替代get_json()方法。
    • max_content_length 
      只读,返回MAX_CONTENT_LENGTH的配置键。
    • module 
      如果请求是发送到一个实际的模块,则该参数返回当前模块的名称。这是弃用的功能,使用blueprints替代。
    • on_json_loading_failed(e)
    • routing_exception = None 
      如果匹配URL失败,这个异常将会/已经抛出作为请求处理的一部分。这通常用于NotFound异常或类似的情况。
    • url_rule = None 
      内部规则匹配请求的URL。这可用于在URL之前/之后检查方法是否允许(request.url_rule.methods) 等等。 
      默认情况下,在处理请求函数中写下 
      print(‘request.url_rule.methods‘, request.url_rule.methods) 
      会打印:

      request.url_rule.methods {‘GET’, ‘OPTIONS’, ‘HEAD’}

    • view_args = None 
      一个匹配请求的view参数的字典,当匹配的时候发生异常,会返回None。
时间: 2024-12-28 15:12:25

Flask 高效开发实战-flask1的相关文章

Flask 高效开发实战-flask2

回调接入点-页面缓存逻辑 from flask import Flask,request,render_template from werkzeug.contrib.cache import SimpleCache app = Flask(__name__) CACHE_TIMEOUT = 300 cache = SimpleCache() cache.timeout = CACHE_TIMEOUT @app.before_request def return_cached(): if not

《Python高效开发实战:Django、Tornado、Flask、Twisted》PDF+源码

Python高效开发实战 链接:https://pan.baidu.com/s/1udqe8V2QSh0CMTVg2vEblQ  提取码:igo0 ? 作者: 刘长龙出版社: 电子工业出版社出版年: 2016-10页数: 516定价: 89装帧: 平装ISBN: 9787121300103 内容简介  · · · · · · 也许你听说过全栈工程师,他们善于设计系统架构,精通数据库建模.通用网络协议.后端并发处理.前端界面设计,在学术研究或工程项目上能独当一面.通过对Python及其周边Web框

《Python高效开发实战》实战演练——基本视图3

在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能. 1)首先在djangosite/app/views.py中建立一个路由响应函数: from django.http import HttpResponse def welcome(request): returnHttpResponse("<h1>Welcome to my tiny twitter!</h1>") 该代码定义

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(1)设定背景图

技术的新发展,除计算机可以接入互联网之外,平板电脑.智能手机.智能电视等其他设备均可访问互联网.在多设备时代,构建多屏体验也不是听说的那么难. 但是这也增加了学习CSS的难度?不知道如何上手,只懂一点基础的CSS语法,在移动互联时代,难道我们就这样落伍了??好好学习吧,看完<CSS高效开发实战:CSS 3.LESS.SASS.Bootstrap.Foundation>,给自己的未来打气! 5.1  设定背景图的大小 在CSS 3出现之前,背景图片的尺寸是由图片的实际尺寸决定的.如果同样的图片要

《Python高效开发实战》实战演练——建立应用2

为了在项目中开发符合MVC架构的实际应用程序,需要在项目中建立Django应用.每个Django项目可以包含多个Django应用.建立应用的语法为: #python manage.pystartapp 应用名称 其中的manage.py是建立项目时在项目目录中产生的命令行工具,startapp是命令关键字,举例如下: #cd djangosite #python manage.py startapp 命令完成后会在项目目录中建立如下目录及文件结构: app/ __init__.py admin.

《从机器学习到深度学习基于scikit-learn与TensorFlow的高效开发实战》PDF代码分析

用通俗的语言讲解涵盖算法模型的机器学习,主要内容包括机器学习通用概念.三个基本科学计算工具.有监督学习.聚类模型.降维模型.隐马尔可夫模型.贝叶斯网络.自然语言处理.深度学习.强化学习.模型迁移等.在深入浅出地解析模型与算法之后,介绍使用Python相关工具进行开发的方法.解析经典案例,能理解.能设计.能编码.能调试,没有基础的在学习后也能够上手设计与开发机器学习产品. 推荐学习<从机器学习到深度学习:基于scikit-learn与TensorFlow的高效开发实战>,场景式机器学习实践,理论

基于Python的Flask的开发实战(第二节程序的基本结构)

1.初始化 所有的flask程序都必须创建一个程序实例 web服务器使用wsgi接口协议,把接收客户端的请求都转发给这个程序实例来进行处理.这个程序实例就是flask对象 from flask import Flask app = Flask(__name__)#__name__决定程序的根目录,以便以后能找到相对于程序根目录的资源文件位置 2.路由和视图函数 程序实例需要知道接收请求后,需要知道url请求应该运行哪些代码.所以保存了一个url和python函数的映射关系:这个映射关系就叫做路由

Python高效开发实战(web)——Django、Tornado、Flask、Twisted

也许你听说过全栈工程师,他们善于设计系统架构,精通数据库建模.通用网络协议.后端并发处理.前端界面设计,在学术研究或工程项目上能独当一面.通过对Python及其周边Web框架的学习和实践,你就可以成为这样的全能型人才. 今天要推荐的就是这本书,内容涉及四种主流的Python Web开发框架,零基础完成网站搭建.数据库设计.前后端开发,全方位领悟Python原理与应用. 一张图了解Python Web开发的所有!!有兴趣的可以当当.亚马逊.京东搜索这本书.

《Python高效开发实战》实战演练——开发Django站点1

6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1  建立项目 在进行Django开发之前需要先用django-admin建立Django项目,语法如下: #django-adminstartproject 站点名称 其中django-admin是安装好Django组件后在Python目录中生成的django项目管理工具.比如,建立一个叫djangosite的开发项目: