[Flask]页面登录相关子功能

一、重定向

        redirecturl_for联用

from flask import redirect

return redirect(url_for(login))    #直接调用login函数

        在HTML中也可以使用url_for来实现跳转

二、登录状态

        使用cookiesession来实现。cookie只能存储少量数据,一般用来存储登录授权。

from flask import session

        flask中的session是进过加密后存储在cookie中的。

session['user_id'] = user.id    #存储一个id

        在使用过时需要在config.py中设置加密字符串

SECRET_KEY = 'ASDJWEURIHsdfwerqrwqr'    #随便写几个字符就行了

三、钩子函数

        用于拦截session中设置得用户信息,以保持用户的登录状态

@app.before_request
def my_before_requset():
    user_id = session.get('user_id')

        获取user_id后在数据库中检查id是否存在,随后将其绑定在全局对象

from flask import g
setattr(g,"user",user)

        如果user不存在,为了后续运行不出错,我们需要给user设置一个none,在app.py中添加如下代码

#----钩子函数,用来从session中获取user_id
@app.before_request
def get_user_id():
    user_id = session.get('user_id')
    if user_id:
        user = UserModel.query.get(user_id)
        setattr(g,"user_id",user_id)
    else:
        setattr(g,"user_id",None)  #为保证程序不出错,将帐号先设置为空

四、上下文处理器

        可以将一些共用的数据放在这里,如用户名。系统在渲染网页的时候会将这个信息传给网页

@app.context_processor
def my_processor():
    return {"user":g.user}

五、退出登录

bp.router("/logout")
def logout():
    session.clear()    #清除cookie
    return render_templates('/')

         且退出状态下不允许访问部分页面,需要进行重定向,需要使用装饰器

六、装饰器

        最后新建一个独立的decorators.py文件以方便其他模块调用

from functools import warps,redirect,url_for
from flask import g

def login_required(func):
    @wraps(func)        #保留函数func的信息
    def inner(*args,**kwargs):    #万能参数
        # 已登录,正常执行
        if hasattr(g,'user'):
            return func(*args,**kwargs)
        # 没登录,重定向初始页面
        else:
            return redirect(url_for('/'))
    return inner()

        装饰器的应用 

from decorators import login_required

@bp.route('/')
@login_required
def welcome():
    pass

七、渲染列表

        在渲染网页的时候需要将整个列表返回给网页

return render_template("index.html",listques = questions)

        传递给html后可以使用循环进行构建

    {% for question in questions %}
  • 表格内容
  • {% endfor %} <\ul>

你可能感兴趣的:(Python,flask,python,后端)