当前位置:首页 » 手机赚钱app » 正文

任务多平台登录获利年夜家好,我是金鱼座,一个走在测试范畴这片蓝海中, 蹉跎前行的技艺渣渣,惟有不停走上来,年夜约能改动点甚么,加油!

前一天重要实现为了名目标根本框架搭建, 本次重要来实现登录页面的美满以及登录加入成果的开辟 1. 登录页面

登录页面主要从adminlte中的获患上登录页面模板,该模板主要基于bootstrap搭建,如下图 image.png 2. 数据库表生成

在table目录的db_.py文件中, 进行以后事变的开辟数据表任务,以后登录用户主要涉及到三个表,User表,Auth表,Role表

from datetime import datetime
from app import db


class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 编号
    name = db.Column(db.String(100), unique=True)  # 操持员账号
    pwd = db.Column(db.String(100))  # 操持员密码
    role_id = db.Column(db.Integer)  # 所属角色
    addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 增加工夫

    def __repr__(self):
        return "" % self.name

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


# 角色表
class Role(db.Model):
    __tablename__ = "role"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 编号
    name = db.Column(db.String(100), unique=True)  # 称号
    auths = db.Column(db.String(600))  # 角色权限列表
    addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 增加工夫

    def __repr__(self):
        return "" % self.name

# 权限表
class Auth(db.Model):
    __tablename__ = "auth"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    name = db.Column(db.String(100), unique=True)  # 称号
    url = db.Column(db.String(255), unique=True)  # 地点
    addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间

    def __repr__(self):
        return "" % self.name


表生成:

进入假造环境的manage.py 目录下,分别实行

> python3  manage.py db init    *    初始化db,生成   migrations文件夹

> python3  manage.py db migrat*e         数据检查变革,生成实行py

> python3 manage.py db upgrade          数据执行,执行后,数据表变革更新

3. 蓝图注册

注册对于应的url image 4. form表单考证

利用wtform模块,在forms.py文件中,构建表单项以及对于付的考证

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, FileField, TextAreaField, SelectField
from wtforms.validators import DataRequired, ValidationError

from table.db_ import User


#
class LoginForm(FlaskForm):
    name = StringField(label="账号",
                          validators=[DataRequired("请输入账号1")],
                          description="账号1",
                          render_kw={
                              'class': "form-control",
                              'placeholder': "请输入账号!",
                              'type': "user"
                              # 'required': "required"
                          })
    pwd = PasswordField(label="密码",
                        validators=[DataRequired("请输入密码1")],
                        description="密码1",
                        render_kw={
                            'class': "form-control",
                            'placeholder': "请输入密码!",
                            'type': "pwd"
                            # 'required': "required"
                        })
    submit = SubmitField(
        label='登录',
        description="登录按钮",
        render_kw={
            'class': "btn btn-primary btn-block btn-flat",
        }
    )

    # 自定义字段验证
    def validate_name(self, field):
        user = field.data
        admin = User.query.filter_by(name=user).count()
        if admin == 0:
            raise ValidationError("账号不存在")


5. 视图函数完成营业逻辑
# 登录成果
@home.route("/login", methods=["GET", "POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        data = form.data
        user = User.query.filter_by(name=data["name"]).first()
        if user.pwd != data["pwd"]:
            flash("密码过错!", "err")
            return redirect(url_for("home.login"))
        session["user"] = user.name
        session["user_id"] = user.id
        return redirect(url_for("admin.admin"))

    return render_template("home/login.html", form=form)

# 加入功能
@home.route("/logout", methods=["GET"])
def logout():
    session.pop('user', None)
    session.pop('user_id', None)
    return redirect(url_for("home.login"))

# 拜候能否登录粉饰器
def is_login(fun):
    @wraps(fun)
    def decorated_function(*args, **kwargs):
        # if "user" not in session:
        if not session.get('user'):
            return redirect(url_for("home.login", next=request.url))
        return fun(*args, **kwargs)
    return decorated_function


6. 前台form表单的改写

# form表单
        
      
        {{ form.name }}
        
      
      
        {{ form.pwd }}
        
      
      
        
          
            
               记取密码
            
          
        
        
        
{#          登录#}
            {{ form.submit }}
            {{ form.csrf_token }} # form表单提交肯定要有这个crsftoken
        
        
      
    

留意事变:

form标签中,action为空时, 默认会利用当前的url来发送post哀求

form表单提交内容中,末端在提交的中央能够加之csrftoken的验证,

<< 上一篇 下一篇 >>