美文网首页
Flask 微电影-2

Flask 微电影-2

作者: 吕阳 | 来源:发表于2017-12-30 14:39 被阅读61次

6-1 管理员登录 微信截图_20171217121202.png

微信截图_20171217120944.png
  1. 改写了models.py
  2. form表单验证,安装flask_wtf
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField

class LoginForm(FlaskForm):
    account = StringField(
        label="账号",
        validators=[
            DataRequired("请输入账号!")
        ],
        description="账号",
        render_kw={
            "class": "form-control",
            "placeholder": "请输入账号!",
            "required": "required"
        }

    )
    pwd = PasswordField(
        label="密码",
        validators=[
            DataRequired("请输入密码!")
        ],
        description="密码",
        render_kw={
            "class": "form-control",
            "placeholder": "请输入密码!",
            "required": "required"
        }
    )
    submit = SubmitField(
        '登陆',
        render_kw={
            "class": "btn btn-primary btn-block btn-flat",
        }
    )
  1. admin/views.py
@admin.route("/login/")
def login():
    form = LoginForm()
    return render_template("admin/login.html", form=form)
  1. templates/admin/login
    账号:
<input name="user" type="text" class="form-control" placeholder="请输入账号!">

替换成

{{ form.account }}

密码:

<input name="pwd" type="password" class="form-control" placeholder="请输入密码!">

替换-

{{ form.pwd }}

登陆:

<a id="btn-sub" type="submit" class="btn btn-primary btn-block btn-flat">登录</a>

替换-

{{ form.submit }}

builtins.KeyError

微信截图_20171217142527.png
  • app/init.py
app.config["SECRET_KEY"] = '5b80d0d6ea6f43c6b3ed0a61f05436cd'
  • templates/admin/login
                    {{ form.submit }}
                    {{ form.csrf_token }}

RUN-1:Form表单验证,显示错误信息

@admin.route("/login/", methods=['GET','POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        data = form.data
    return render_template("admin/login.html", form=form)
  1. login.html
   {% for err in form.pwd.errors %}
                <div class="col-md-12">
                    <font style="color:red"> {{ err }}</font>
                </div>
                {% endfor %}
  1. form注释掉前端验证类
class LoginForm(FlaskForm):
    account = StringField(
        label="账号",
        validators=[
            DataRequired("请输入账号!")
        ],
        description="账号",
        render_kw={
            "class": "form-control",
            "placeholder": "请输入账号!",
            # "required": "required"
        }

    )
    pwd = PasswordField(
        label="密码",
        validators=[
            DataRequired("请输入密码!")
        ],
        description="密码",
        render_kw={
            "class": "form-control",
            "placeholder": "请输入密码!",
            # "required": "required"
        }
    )
    submit = SubmitField(
        '登陆',
        render_kw={
            "class": "btn btn-primary btn-block btn-flat",
        }
    )
微信截图_20171217162831.png

RUN-2:验证表单提交

  1. form中验证用户名是否存在。
    def validate_account(self, field):
        account = field.data
        admin = Admin.query.filter_by(name=account).count()
        if admin == 0:
            raise ValidationError("账号不存在!")
  • 测试不存在的用户名


    微信截图_20171217163410.png

RUN-3 验证密码

  1. model中加入验证密码方法
class Admin(db.Model):
    __tablename__ = "admin"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    pwd = db.Column(db.String(100))
    is_super = db.Column(db.SmallInteger)
    role_id = db.Column(db.Integer, db.ForeignKey('role.id'))
    addtime = db.Column(db.DateTime, index=True, default=datetime.now)
    adminlogs = db.relationship('Adminlog', backref='admin')
    oplogs = db.relationship('Oplog', backref='admin')

    def __repr__(self):
        return "<Admin %r>" % self.name

    def check_pwd(self, pwd):
        from werkzeug.security import check_password_hash
        return check_password_hash(self.pwd, pwd)

  1. forms
@admin.route("/login/", methods=["GET","POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        data = form.data
        admin = Admin.query.filter_by(name=data["account"]).first()
        if not admin.check_pwd(data["pwd"]):
            flash("密码错误")
            return redirect(url_for("admin.login"))
        session["admin"] = data["account"]
        return redirect(request.args.get("next") or url_for("admin.index"))
    return render_template("admin/login.html", form=form)

  1. 模板
  {% for msg in get_flashed_messages() %}
            <p class="login-box-msg">{{ msg }}</p>
        {% endfor %}

运行结果:重定向,显示密码错误


微信截图_20171217172901.png

RUN-4: 装饰器访问限制,没有登陆不能访问主页。

  1. views
def admin_login_req(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if "admin" not in session:
            return redirect(url_for("admin.login", next=request.url))
        return f(*args, **kwargs)
    return decorated_function
@admin.route("/")
@admin_login_req
def index():
    return render_template("admin/index.html")

  1. views
@admin.route("/logout/")
@admin_login_req
def logout():
    session.pop("admin", None)
    return redirect(url_for("admin.login"))

6-2标签管理

views-forms-templates

6-7开始

相关文章

  • Flask 微电影-2

    6-1 管理员登录微信截图_20171217121202.png 改写了models.py form表单验证,安装...

  • Flask 构建微电影视频网站(1)

    Flask构建电影视频网站 Python MTV模型 Flask微内核 Flask扩展插件配置及使用方法 根据业务...

  • Flask 微电影-1

    2-3第一个flask程序 virtualenv的使用 创建虚拟环境: virtualenv venv 激活虚拟环...

  • Flask学习(一)

    Flask学习(一) Flask是基于Werkzeug,Jinja 2和良好意图的Python微框架,其实在使...

  • flask30分钟入门教程

    flask30分钟入门教程 Flask是基于Werkzeug,Jinja 2和良好意图的基于Python的微框架。...

  • flask框架入门级基础

    摘要 flask框架是一个微框架,即:微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask ...

  • Python Web框架 Flask - Flask

    python常用框架 Django + Flask + Tornado + Twisted Flask微框...

  • Flask 基本流程

    Flask 基本流程 一、Flask简介 Flask是一个基于Python实现的web开发'微'框架。 Flask...

  • day56-认识Flask

    一、Flask框架 1.Flask是一个基于Python实现的web开发的'微'框架,只提供核心的库 2.Flas...

  • Flask构建微电影视频网站

    IT猿课(www.ityuanke.com)[it猿课ityuanke.com]Flask构建微电影视频网站 20...

网友评论

      本文标题:Flask 微电影-2

      本文链接:https://www.haomeiwen.com/subject/rmuywxtx.html