最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • flask如何判断用户已经登录

    正文概述    2020-08-21   484

    flask如何判断用户已经登录

    Flask判断用户登录,主要思想就是通过session中是否有指定的值来判定用户是否已经登录,登录及跳转到指定的页面否则跳转到登录界面进行登录.

    首先写一个登录的试图函数:

    def login():
        if request.method == 'GET':
            return render_template('login.html')
        user = request.form.get('user')   
        #form的表单提交的数据request.form 类似于post请求request.args 类似django的request.get
        pwd = request.form.get('pwd')
     
        if user =='gallo' and pwd=='123':
            session['user'] = user
            return redirect('/home')
        return render_template('login.html',error="用户名错误")

    方法一:

    每次在函数内首先进行session的判定:

    @app.route('/home')
    def home():
        user = session.get('user')
        if not user:
            return redirect('/login')
        return render_template('home.html')

    每次在函数内部最前面先进行session的判定,满足则跳转到'/home'页面,否则跳转到''/login'页面.

    此方法的弊端:重复代码过多不利于开发.所以需要改进

    方法二:装饰器

    通过装饰器来对其进行判定:

    import functools
    def is_login(func):
        @functools.warps(func)
        def inner(*args,**kwargs):
            user = session.get('user')
            if not user:
                return redirect('login')
            return func(*args,**kwargs)
        return inner

    我们可以看到此装饰器里面还有一个functools.waprs():的函数,这样做的目的是为了通过装饰器后不改变函数的性质,如果不加装饰器所有函数都name会是inner函数,加上此函数可以不改变函数的性质.

    所以加上装饰器的函数将会是:

    @app.route('/home')
    @is_login
    def home():
    return render_template('home.html')

    这样就节省了很大的代码空间,但是只有更好没有最好,只有更简洁的代码没有最简洁的代码.所以出现了方法三.

    方法三:before_request:

    berfore_request的作用是在所有函数执行之前都应该先执行before_request函数.

    所以只需要单独写一个函数来实现before_request的功能即可.

    @before_request
    def is_login():
        if requset.path == 'login':
            return None
        if session.get('user'):
            return None
        return redirect('/login')

    然而没有什么完美的事情比如说before_request让代码看起来更加简洁可是,他必须实在所有函数执行之前都会执行,所有有些时候不适合用此方法.

    总结:在批量使用中使用before_request函数,在单个别的使用中使用装饰器的方法.


    起源地下载网 » flask如何判断用户已经登录

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元