day2

view视图函数

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

# 专门管理路由的库: flask-blueprint
# 第一步: 生成蓝图对象
from utils.functions import login_required

blue = Blueprint('first', __name__)
# 第二步: 使用蓝图对象, @blue.route(‘路由’)

# 定义路由
@blue.route('/index/', methods=['GET', 'POST'])
@login_required
def index():
    if request.method == 'GET':
        return render_template('index.html')

# 3.登陆验证,存储seesion-cookie

@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 == 'vincent' and password == '123456':
            # 使用session进行登录状态保持
            # TODO: 思考: 键user_id,值1,存储在何处?存储在cookie中
            # cookie中k-v,其中k为字符串'session',v为编码后的键值对信息
            # 使用session存储数据,需指定secret_key参数

            # flask存储session数据,分为两种方式
            # 第一种: 将数据存储在cookie中(好处: 服务器不用再存储session数据)
            # 第二种: 将数据存储在服务器中
            #       1. 当第一次访问访问任何一个url链接时,cookie中都会设置一个键值对
            #          键为session,值为uuid类型的数据
            #       2. 在服务器redis中会存储uuid的值,
            #          以string类型进行存储uuid和设置的键值对信息

            # TODO:思考: django中django_session中的数据何时被创建?
            #       1. 在使用request.session[key]=value时,cookie中sessionid才会被创建
            #       2. django_session中也才会创建数据
            session['user_id'] = 1
            return redirect('/index/')

        return render_template('login.html')


@blue.route('/name/<uname>/',methods=['GET'])
@login_required
def get_name(uname):
    return f'uname:{uname}'

@blue.route('/zoo/<int:id>/<int:id2>/<int:id3>/',methods=['GET'])
def zoo(id,id2,id3):
    return 'success'






# 4.重定向,反向解析
@blue.route('/redirect/', methods=['GET'])
def my_redirect():
    # 重定向: redirect(’跳转的地址‘)
    # 反向解析, url_for('生成蓝图对象的第一个参数.重定向的函数名', 参数名=值)
    # print(url_for('first.get_name', uname='123'))
    # return redirect(url_for('first.get_name', uname='vincent'))

    # 无参的跳转
    # return redirect(url_for('first.index'))

    # 多参的跳转
    # url_for('生成蓝图的第一个参数.重定向函数名', 参数1=值1, 参数2=值2...)
    return redirect(url_for('first.zoo', id=1, id2=2, id3=3))

function函数

1.装饰器
# 1. 外层函数嵌套内层函数
# 2. 外层函数返回内层函数
# 3. 内层函数调用外层函数的参数
from functools import wraps

from flask import session, redirect

# TODO: 1. 返回函数func()如何接收参数?
# TODO: 2. @wraps(func)的作用?

def login_required(func):
    @wraps(func)
    def check(*args, **kwargs):
        # 步骤1: 先从cookie中取出uuid值
        # 步骤2: 从redis中取字符串类型,key为uuid
        user_id = session.get('user_id')
        if not user_id:
            # 没登录
            return redirect('/login/')
        return func(*args, **kwargs)

    return check

manage函数

import redis
from flask import Flask, request, render_template,\
    session, redirect
from flask_script import Manager
from flask_session import Session

# 生成对象
from app.views import blue



app = Flask(__name__)
# 设置secret_key
app.secret_key = '123456atshdt745e4w4345487ikhj'
# 设置session
# TODO: 思考,redis中存储数据的类型?
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.Redis(host='139.196.79.238',
                                          port=6379,
                                          password='1qaz2wsx')
# 初始化app,方法1
# Session(app)
# 方法2
sess = Session()
sess.init_app(app)

# 第三步: 设置蓝图
app.register_blueprint(blueprint=blue)


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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容

  • 点此进入目录:[干货] 十天 教你从创意到上线APP 一、架构设计的目的 通过设计使程序模块化,做到模块内部的高聚...
    常思行阅读 1,456评论 0 14
  • 4.切换到项目目录,修改该目录下的urls.py文件,对应用中设定的URL进行合并。 (venv) $ vim o...
    嘿嘿_9c52阅读 349评论 0 0
  • 复习 Vue单文件方式 xxx.vue 1:准备好配置文件 package.json(包描述文件&&封装命令 np...
    12345ss阅读 192评论 0 0
  • UIViewController 的生命周期答:来源:http://www.cnblogs.com/dahe007...
    IreneWu阅读 631评论 1 2
  • 1、列表渲染的基本知识 指令名称:v-for 指令格式:(别名 in 表达式) demo1: 基本渲染: eg: ...
    卖咸鱼的猫阅读 360评论 0 1