|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- from flask import Flask, render_template, redirect, url_for, request, flash
- from flask_login import (
- LoginManager,
- UserMixin,
- login_user,
- login_required,
- logout_user,
- current_user,
- )
- from flask_sqlalchemy import SQLAlchemy
- from flask_bootstrap import Bootstrap5, SwitchField
- from flask_wtf import FlaskForm, CSRFProtect
- from wtforms.fields import *
- app = Flask(__name__)
- app.config["SECRET_KEY"] = "20200808"
- app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///login505.db"
- # 设置按钮默认样式和尺寸参数
- app.config['BOOTSTRAP_BTN_STYLE'] = 'primary'
- app.config['BOOTSTRAP_BTN_SIZE'] = 'sm'
- # 设置表格操作按钮
- app.config['BOOTSTRAP_TABLE_VIEW_TITLE'] = 'Read读取'
- app.config['BOOTSTRAP_TABLE_EDIT_TITLE'] = 'Update修改'
- app.config['BOOTSTRAP_TABLE_DELETE_TITLE'] = 'Remove删除'
- app.config['BOOTSTRAP_TABLE_NEW_TITLE'] = 'Create新建'
- db = SQLAlchemy(app)
- login_manager = LoginManager()
- login_manager.init_app(app)
- login_manager.login_view = "login"
- login_manager.login_message = "请先登录"
- # 实例化UI bootstrap5
- bootstrap = Bootstrap5(app)
- # 跨域访问实例化
- csrf = CSRFProtect(app)
- ### 创建 User 模型
- class User(UserMixin, db.Model):
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(80), unique=True, nullable=False)
- password = db.Column(db.String(120), nullable=False)
- class ULoginForm(FlaskForm):
- username = StringField("用户名")
- password = PasswordField("密码")
- submit = SubmitField("登入")
- Logout = SubmitField("退出")
- Cancel = SubmitField("取消")
- class ELoginForm(FlaskForm):
- id = IntegerField('编号')
- username = StringField("用户名")
- password = PasswordField("密码")
- submit = SubmitField("登入")
- Logout = SubmitField("退出")
- Cancel = SubmitField("取消")
- # 新增数据----------------------------------------------------------------------
- @app.route('/new', methods=['GET', 'POST'])
- def new():
- form = ELoginForm()
- aiuser = User()
- if form.validate_on_submit():
- op = form.username.data
- log = form.password.data
- id = form.id.data
- user = User(id=id, password=log, userrname=op)
- db.session.add(user)
- db.session.commit()
- flash("你的信息已经保存!")
- return redirect(url_for("index"))
- return render_template('ai_new.html', form=form, title='新增')
- # 删除数据----------------------------------------------------------------------
- @app.route('/delete/<id>', methods=['GET', 'POST'])
- def delete(id):
- aiuser = User.query.get(id)
- flash(f'编号: {id} --{aiuser.username}-----{aiuser.password}-----的用户数据删除完成.')
- if aiuser:
- db.session.delete(aiuser)
- db.session.commit()
- return redirect(url_for("index"))
- return f'提示: {id} 数据不存在无法删除. 返回 <a href="/ai">表格</a>.'
- # 查看数据----------------------------------------------------------------------
- @app.route('/view/<id>', methods=['GET', 'POST'])
- def view(id):
- aiuser = User.query.get(id)
- form = ULoginForm()
- # form.id.data = aiuser.id
- form.username.data = aiuser.username
- form.password.data = aiuser.password
- if form.validate_on_submit():
- return redirect(url_for("index"))
- if aiuser:
- return render_template('ai_View.html', form=form, message=aiuser)
- return f'没有对应数据 {id} 存在. 返回 <a href="/ai">table</a>.'
- # 编辑数据----------------------------------------------------------------------
- @app.route('/edit/<id>', methods=['GET', 'POST'])
- def edit(id):
- # 第一步:定义表单和获取数据
- form = ELoginForm()
- aiuser = User.query.get(id)
- # 第三步:点击保存数据
- if form.validate_on_submit():
- # 获取页面数据到数据对象模型
- aiuser.username = form.username.data
- aiuser.password = form.password.data
- db.session.commit() # 提交保存数据
- flash("用户信息已经更新!") # 提示数据操作状态
- return redirect(url_for("index")) # 定向到列表函数页面
- # 第二步:读取数据显示处理
- # 把数据发送到页面表单中
- form.username.data = aiuser.username
- form.password.data = aiuser.password
- form.id.data = aiuser.id
- # 提示操作情况
- flash("用户信息读取完成!")
- # 数据显示页面渲染
- return render_template('ai_edit.html', form=form, title='编辑')
- # 测试显示所有数据信息===================================================================
- # ctrl+/ 注释代码
- @app.route("/i")
- @login_required
- def index():
- titles = [
- ("id", "编号"),
- ("username", "用户名"),
- ("password", "密码"),
- ] # 自定义标题
- page = request.args.get("page", 1, type=int)
- pagination = User.query.paginate(page=page, per_page=5)
- user = pagination.items
- print(user)
- return render_template(
- "AItable.html",
- pagination=pagination,
- titles=titles,
- messages=user,
- Message=User,
- title="37创客授权用户",
- )
- ### 受保护的视图
- @app.route("/user")
- @login_required # 增加验证部分代码
- def user():
- return f"欢迎: {current_user.username}"
- # ==========================================用户授权部分===================================================================
- ### 用户加载函数
- @login_manager.user_loader
- def load_user(user_id):
- return User.query.get(int(user_id))
- ### 登录视图
- @app.route("/", methods=["GET", "POST"])
- @app.route("/login", methods=["GET", "POST"])
- def login():
- form = ULoginForm()
- if request.method == "POST":
- username = request.form["username"]
- password = request.form["password"]
- user = User.query.filter_by(username=username, password=password).first()
- if user:
- login_user(user)
- flash("登录成功!")
- return redirect(url_for("index"))
- else:
- flash("用户不存在请核对")
- flash("请输入你的用户名和密码!")
- return render_template("ulogin.html", form=form, title="37创客登录")
- ### 退出操作
- @app.route("/logout")
- @login_required
- def logout():
- logout_user()
- return redirect(url_for("login"))
- if __name__ == "__main__":
- app.run(host="0.0.0.0", port=84, debug=True)
复制代码
|
|