06-01 管理员登录

管理员登录功能涉及到操作步骤:

  1. app/__init__.py中创建db对象
  2. app/models中导入db对象
  3. app/admin/forms.py中定义表单验证
  4. app/templates/admiin/login.html中使用表单字段/信息验证/消息闪现
  5. app/admin/views.py中处理登录请求, 保存会话
  6. app/admin/views.py定义登录装饰器访问控制

管理员登录功能涉及到知识点模型:

  1. 模型:    Admin
  2. 表单:   LoginForm        #
    from flask_wtf import FlaskForm
  3. 请求方法:   GET/POST
  4. 访问控制:   无

 

一个报错

报错处理:

RuntimeError: A secret key is required to use CSRF.

06-01 管理员登录_第1张图片

解决方法:

步骤1:生成

06-01 管理员登录_第2张图片

步骤2: E:\study\mooc\MicroMovie200731\app\__init__.py中加入,可以正常访问.

06-01 管理员登录_第3张图片

步骤3:在E:\study\mooc\MicroMovie200731\app\templates\admin\login.html中加入{{ form.csrf_token }}, 刷新网页

06-01 管理员登录_第4张图片

查看源代码发现多了一行:

 管理员登录功能开发步骤

步骤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中引入并实例化表单类

06-01 管理员登录_第5张图片

4.2  E:\study\mooc\MicroMovie200731\app\templates\admin\login.html中使用Flask方法载入表单字段

06-01 管理员登录_第6张图片

4.3  E:\study\mooc\MicroMovie200731\app\templates\admin\login.html中需要加入{{ form.csrf_token }},此时可以正常访问\admin\login.html.

{{ form.csrf_token }}

4.4 添加验证效果 需要用到的知识点:

  • novalidate属性
  • form.account.errors的用法:    

用法一:

                {% 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

验证代码:

06-01 管理员登录_第7张图片

验证效果:

06-01 管理员登录_第8张图片

4.5 消息闪现:

 flash消息闪现功能,需要提前导入flash包:

from flask import flash  # flash消息闪现

 程序示例:

06-01 管理员登录_第9张图片

 html文件:  E:\study\mooc\MicroMovie200731\app\templates\admin\login.html

06-01 管理员登录_第10张图片

 运行结果:

06-01 管理员登录_第11张图片

步骤5:  app/admin/views.py中处理登录请求, 保存会话

保存会需要用到session功能

E:\study\mooc\MicroMovie200731\app\admin\views.py中

from flask import session  # 用于保存用户或者注销用户

06-01 管理员登录_第12张图片

步骤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

装饰器使用:

06-01 管理员登录_第13张图片

 添加装饰器后的效果验证:

登录后清除最近的访问记录,会发现刷新页面后用户已经退出登录.

你可能感兴趣的:(#,Flask,构建微电影视频网站)