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()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容