1.制作登录装饰器函数
在项目根目录创建一个decoratirs.py
创建如下代码
from functools import wraps
from flask import g,redirect,url_for
def login_required(func):
#保留func的信息
@wraps(func)
def inner(*args,**kwargs):
if g.user:
return func(*args,**kwargs)
else:
return redirect(url_for("auth.login"))
return inner
2.登录装饰器的引用
在发布问答视图函数前插入下面的代码
@login_required
qa.py的完整代码如下
from flask import Blueprint,request,render_template,redirect,url_for,g
from .forms import Questionform
from models import QuestionModel
from exts import db
from decorators import login_required
# /
bp = Blueprint("qa",__name__,url_prefix="/")
# http://127.0.0.1:5000
@bp.route("/")
def index():
return "首页"
@bp.route("/qa/public",methods=['GET','POST'])
@login_required
def public_question():
if request.method == 'GET':
return render_template("public_question.html")
else:
form = Questionform(request.form)
if form.validate():
title = form.title.data
content = form.content.data
question = QuestionModel(title=title,content=content,author=g.user)
db.session.add(question)
db.session.commit()
return redirect("/")
else:
print(form.errors)
return redirect(url_for("qa.public_question"))
3.测试登录装饰器
更改base.html中的发布问答的url
<a class="nav-link" href="{{ url_for('qa.public_question') }}">发布问答</a>
访问
http://127.0.0.1:5000/auth/login
点击发布问答
没有登录就不会跳转到发布问答页面了
登录后,才能跳转到发布问答页面