管理员登录功能涉及到操作步骤:
管理员登录功能涉及到知识点模型:
from flask_wtf import FlaskForm
报错处理:
RuntimeError: A secret key is required to use CSRF.
解决方法:
步骤1:生成
步骤2: E:\study\mooc\MicroMovie200731\app\__init__.py中加入,可以正常访问.
步骤3:在E:\study\mooc\MicroMovie200731\app\templates\admin\login.html中加入{{ form.csrf_token }}, 刷新网页
查看源代码发现多了一行:
步骤1: app/__init__.py中创建db对象
步骤2: app/models中导入db对象
步骤3: app/admin/forms.py中定义表单验证
# coding:utf8 from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired,Length class LoginForm(FlaskForm): # 管理员登录表单 account = StringField( label="账号", validators=[ DataRequired("请输入账号!"), Length("用户名长度必须大于%(max)d且小于%(min)d") ], description="账号", render_kw={ # 设置生成前端"账号标签"对应的html属性 "class": "form-control", "placeholder": "请输入账号!", "required": "required" } ) pwd = PasswordField( label="密码", validators=[ DataRequired("请输入密码!"), Length("密码长度必须大于%(max)d且小于%(min)d") ], description="密码", render_kw={ # 设置生成前端"账号标签"对应的html属性 "class": "form-control", "placeholder": "请输入密码!", "required": "required" } ) submit = SubmitField( "登录", render_kw={ # 设置生成前端"账号标签"对应的html属性 "class": "btn btn-primary btn-block btn-flat", } )
步骤4: app/templates/admiin/login.html中使用表单字段/信息验证/消息闪现
4.1 E:\study\mooc\MicroMovie200731\app\admin\views.py中引入并实例化表单类
4.2 E:\study\mooc\MicroMovie200731\app\templates\admin\login.html中使用Flask方法载入表单字段
4.3 E:\study\mooc\MicroMovie200731\app\templates\admin\login.html中需要加入{{ form.csrf_token }},此时可以正常访问\admin\login.html.
{{ form.csrf_token }}
4.4 添加验证效果 需要用到的知识点:
用法一:
{% for err in form.account.errors %}
{{ err }}{% endfor %}用法二 :
{{form.name.errors[0] }}{{form.name.errors[0] }}
E:\study\mooc\MicroMovie200731\app\templates\admin\login.html
验证代码:
验证效果:
4.5 消息闪现:
flash消息闪现功能,需要提前导入flash包:
from flask import flash # flash消息闪现
程序示例:
html文件: E:\study\mooc\MicroMovie200731\app\templates\admin\login.html
运行结果:
步骤5: app/admin/views.py中处理登录请求, 保存会话
保存会需要用到session功能
E:\study\mooc\MicroMovie200731\app\admin\views.py中
from flask import session # 用于保存用户或者注销用户
步骤6: app/admin/views.py定义登录装饰器访问控制
如果用户退出了当前登录状态,就不能再访问需要登录后才能进入的页面,此时可以用装饰器控制.定义登录控制装饰器如下:
E:\study\mooc\MicroMovie200731\app\admin\views.py中除了login函数以外,其他函数均需要使用此装饰器:
def admin_login_req(f): # 判断是否处于登录状态的装饰器 @wraps(f) def decorated_function(*args, **kwargs): # if session["admin"] is None: # 从此用法报错:KeyError: 'admin' if "admin" not in session: return redirect(url_for("admin.login", next=request.url)) return f(*args, **kwargs) return decorated_function
装饰器使用:
添加装饰器后的效果验证:
登录后清除最近的访问记录,会发现刷新页面后用户已经退出登录.