Flask学习笔记--11

来源:互联网 发布:电信4g网络覆盖范围 编辑:程序博客网 时间:2024/06/07 00:42

github中有记录。(提交时 & 写成了 % ,尴尬)

昨天写到了用户登录页面,然后需要添加用户登出功能,再对代码进行一些包装处理,使用装饰器,确保用户登录后才能继续之后的操作。

Version-13 :

1.在导航栏中添加相应的页面链接

这里使用了jinja2中的条件语句(上次写用户登录的时候,设置了session[‘logged_in’] = True)
验证用户登录后显示Logout, Dashboard链接,否则显示Register和Login链接。

_navbar.html中:

          <ul class="nav navbar-nav navbar-right">            {% if session.logged_in %}              <li><a href="/dashboard">Dashboard</a></li>              <li><a href="/logout">Logout</a></li>            {% else %}              <li><a href="/register">Register</a></li>              <li><a href="/login">Login</a></li>            {% endif %}          </ul>   

2.logout功能比较容易实现,用户登录的时候创建了session,这里使用session.clear()来清除缓存数据就可以了。

@app.route("/logout")@is_logged_indef logout():    session.clear()    flash("You're now logged out.","success")    return redirect(url_for('login'))

注:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

来自百度百科-session3.logout中使用了@is_logged_in装饰器,用来判断用户有没有登录。

def is_logged_in(f):    @wraps(f)    def wrap(*args, **kwargs):        if 'logged_in' in session:            return f(*args, **kwargs)        else:            flash('Unauthorized, Please login', 'danger')            return redirect(url_for('login'))    return wrap

如果没有使用装饰器,用户直接输入logout地址:

这里写图片描述

页面会跳转到login页面,显示”You’re now logout .”不太正常:

这里写图片描述

加上装饰器的效果:
这里写图片描述

这里写图片描述