美文网首页
day57-Flask视图和模板

day57-Flask视图和模板

作者: xdxh | 来源:发表于2018-12-18 17:07 被阅读0次

一、session数据存储在客户端

1、session数据存储在客户端的概念
Flask采用'secure cookie'方式保存session,即session数据是使用base64编码后保存在客户端的cookie中,也就是说无须依赖第三方数据库保存session数据。

2.设置session

from flask import Blueprint, redirect, url_for, request, render_template, session


@blueprint.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'coco' and password == '123123':
            session['user_id'] = 1

        return redirect(url_for('first.hello'))

二、session数据存储在服务端

1.session数据存储在服务端,分为以下三步骤
步骤1: 当客户端发送请求到服务端的时候,服务端会校验请求中cookie参数中的sessionid值,如果cookie中不存在sessionid则认为客户端访问服务端时,是发起了一个新的会话。

步骤2: 如果是新的会话,则服务端会传递给客户端一个cookie,并在cookie中存储一个新的sessionid值,并将相关数据保存在session中。

步骤3: 客户端下次再发送请求的时候,请求上下文对象会携带cookie,通过校验cookie中的sessionid值,即可判断是否是同一会话。

步骤4: 如果校验会话是同一会话,则可以从session中获取到之前保存的数据。

2.安装

pip install flask-session

pip install redis

3.基础语法

# 设置session
session['key'] = value

# 读取session
result = session['key'] :如果内容不存在,将会报异常

result = session.get('key') :如果内容不存在,将返回None

# 删除session
session.pop('key')

# 清空session中的所有数据
session.clear()

4.配置连接redis数据库

import redis
from flask import Flask
from flask_script import Manager
from flask_session import Session

from views import blue

app = Flask(__name__)

app.register_blueprint(blueprint=blue, url_prefix='/app' )

app.secret_key = '1234567890qwertyuiopasdfghjklzxcvbnm'

# 配置session
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port=6379)

# 初始化session和app对象
se = Session()
se.init_app(app)

manage = Manager(app)

if __name__ == '__main__':
    manage.run()

5.设置session

from flask import Flask, Blueprint, render_template, \
    session, url_for, request, redirect

blue = Blueprint('app', __name__)


@blue.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')

    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'coco' and password == '123123':
            session['user_id'] = 1
            return redirect(url_for('app.index'))


@blue.route('/index/')
def index():
    return render_template('index.html')

三、flask模板

1.block标签

{% block title %}
{% endblock %}

{% block css %}
{% endblock %}

{% block js %}
{% endblock %}

{% block content %}
{% endblock %}

2.extends标签

{% extends 'base.html' %}

3.for标签

{% for i in c %}
    <p>{{ i }}</p>
{% else %}

loop.index:循环迭代索引
loop.revindex:循环逆序迭代索引
loop.first:是否第一次迭代
loop.last:是否最后一次迭代
4.if标签
注意:jinja2中没有ifequal标签。

{% if nums ==10 %}
    {{ nums }}
{% endif %}

5.宏的使用

<!--宏定义-->
{% macro say() %}
    <p>今天天气真好</p>
{% endmacro %}

{% macro good_list(id, name, price, nums) %}
    <p>编号id:{{ id }}, 名称:{{ name }}, 价格:{{ price }}, 数量:{{ nums }}</p>
{% endmacro %}

<!--引入宏-->
{% from 'functions.html' import say %}
{% from 'functions.html' import good_list %}

<!--调用宏-->
{{ say() }}

{{ good_list('1', '草莓', '10', '1000') }}
{{ good_list('2', '苹果', '5', '1000') }}

6.解析变量

@blue.route('/temp/')
def temp():
    content = [65, 13, 786, 867, 999]
    return render_template('temp.html', c=content)

{% block content %}
    {{ c }}
{% endblock %}

7.过滤器
注意:可以链式调用过滤器。

<!--解析文本中的样式-->
{{ content_h2 | safe}}

<!--删除文本中的样式-->
{{ content_h2_new | striptags }}

<!--文本长度-->
{{ content_h2 | length }}

<!--去除文本中前后的空格-->
{{ content_h2_new | trim }}

<!--文本内容大写-->
{{ 'python' | upper }}

<!--文本内容小写-->
{{ 'Python' | lower }}

<!--链式调用过滤器-->
{{ content_h2_new | trim | length }}

相关文章

  • day57-Flask视图和模板

    一、session数据存储在客户端 1、session数据存储在客户端的概念Flask采用'secure cook...

  • 视图和模板

    视图和模板 [TOC] 控制器(在php文件)使用模板: VIew模板输出: 相应的html文件下使用name变量...

  • TP5引用静态文件(2)

    在模块下面创建视图层View,然后视图层下创建对应的模板,模板下面创建对应的html文件(注意模板名和html文件...

  • thinkphp5学习笔记(六)视图

    在控制器中使用视图的三种方法 模板引擎的配置 模板赋值的五种方法 视图渲染方法 模板输出替换 变量输出 模板布局和...

  • thinkPHP——视图和模板

    视图 在index文件夹下面新建一个view文件夹,然后在新建一个index文件夹(与控制器中类的名字一致【小写】...

  • thinkPHP——视图和模板

    视图 在index文件夹下面新建一个view文件夹,然后在新建一个index文件夹(与控制器中类的名字一致【小写】...

  • 07django快速预览(django模板)

    模板 1. 创建模板 2. 定义模板 3. 视图调用模板 4. 视图调用模板简写 模板 如何向请求者返回一个漂亮的...

  • CodeSmith oracle表模型与视图模型模板

    表模型模板 视图模型模板

  • VC多文档程序文档,视图指针遍历问题

    2009-05-11 1、模板、文档、视图、框架的关系 (1)文档保留该文档的视图列表和指向创建该文档的文档模板的...

  • 小程序双线程架构

    为了安全和管控,小程序使用双线程执行:视图线程和逻辑线程。 View视图线程,负责视图渲染,其中WXML模板和WX...

网友评论

      本文标题:day57-Flask视图和模板

      本文链接:https://www.haomeiwen.com/subject/zgvlkqtx.html