zoukankan      html  css  js  c++  java
  • 29、Flask实战第29天:cms用户名渲染和注销功能实现

    这节来完成用户名渲染和注销的功能,目前用户名在前端页面是写死的,我们需要动态的展示出来

    用户名渲染

    实现用户名动态展示,其中一种方法就是在视图函数,根据session信息,获取到user id,通过该id找到用户信息,再通过模板变量传递到前端模板。但是这种方法不是很好。因为在其他视图肯定也会用到用户信息,这样的话每个视图函数都要有一个获取用户信息的过程,这样就显得冗余。

    之前我们讲过flask中有一个g对象,这个g对象可以在整个flask项目中使用,其实在模板中也可以使用。有了这个g对象,那么我们就可以用户信息存入到这个g对象中,这样可以直接通过这个g对象获取用户信息了。

    我可以定义一个before_request钩子函数,在请求视图函数前把用户信息存入g, 编辑cms.views.py

    ...
    from flask import g
    
    @bp.before_request
    def before_request():
        if config.CMS_USER_ID in session:
            user_id = session.get(config.CMS_USER_ID)
            user = CMSUser.query.get(user_id)
            if user:
                g.cms_user = user
    
    ...

    这样,我们就可以在前端模板cms_index.html通过g.cms_user.username获取用户名了

    <li><a href="#">{{ g.cms_user.username }}<span>[超级管理员]</span></a></li>

    注销功能实现

    注销也比较简单,就是把用户的user id从session中移除就可以了,然后再重定向到登录页面即可

    编辑cms.views.py,编写一个logout视图函数

    @bp.route('/logout/')
    @login_required
    def logout():
        del session[config.CMS_USER_ID]
        return redirect(url_for('cms.login'))

    修改cms_index.html中注销的链接

    <li><a href="{{ url_for('cms.logout') }}">注销</a></li>

    这样就实现了退出登录的功能了。

    代码优化

    上面我们把钩子函数写了 cms.views.py文件里面。为了规范一点, views文件我们只写视图,把钩子函数单独写在一个文件里面。

    在cms创建一个hooks.py用来专门写钩子函数的,把上面 views里面的钩子函数剪切到cms.hooks.py

    from flask import session, g
    import config
    from .views import bp
    from .models import CMSUser
    
    @bp.before_request
    def before_request():
        if config.CMS_USER_ID in session:
            user_id = session.get(config.CMS_USER_ID)
            user = CMSUser.query.get(user_id)
            if user:
                g.cms_user = user

    写完cms.hooks.py还不够,因为cms.hooks.py还得不到执行,得不到执行,那么g对象就无法存入用户信息

    所以,我们只需要在cms.__init__.py导入它,那么就可以得到执行了

    from .views import bp
    import apps.cms.hooks
  • 相关阅读:
    Ubuntu 安装mono
    关于BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
    android 常用框架
    理解assign,copy,retain变strong
    SQLSERVER2008R2正确使用索引
    除非 Windows Activation Service (WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法启动网站。目前,这两项服务均处于停止状态。
    Android资源命名规范
    eclipse导入Android项目后,项目的名称变为了主Activity的名称
    日常运维管理技巧一(查看负载 W)
    Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言
  • 原文地址:https://www.cnblogs.com/sellsa/p/9427920.html
Copyright © 2011-2022 走看看