#Flask Web开发 (qq.com)
本案例为python用户授权案例,使用了flask-login和sqlite数据库实现
python app文件 - # 安装 pip install Flask Flask-Login Flask-SQLAlchemy
- # flasklogin.py
- # sqlite 数据库;数据模型;bootstrap
- 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
- app = Flask(__name__)
- app.config['SECRET_KEY'] = '20200808'
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///login.db'
- db = SQLAlchemy(app)
- login_manager = LoginManager()
- login_manager.init_app(app)
- login_manager.login_view = 'login'
- ### 创建 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)
- ### 创建数据库
- db.create_all()
- ### 用户加载函数
- @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():
- 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('fs'))
- else:
- flash('用户不存在Invalid credentials')
- return render_template('login.html')
- ### 受保护的视图
- @app.route('/user')
- @login_required
- def user():
- return f'欢迎: {current_user.username}'
- @app.route('/index')
- # @login_required
- def index():
- return f'index 欢迎:'
- @app.route('/fs')
- @login_required
- def fs():
- return f'安全锋速 欢迎:'
- ### 退出
- @app.route('/logout')
- @login_required
- def logout():
- logout_user()
- return redirect(url_for('login'))
- if __name__ == '__main__':
- app.run(debug=True)
复制代码
模板文件:templates/login.htlml - <!--templates/login.html-->
- <!DOCTYPE html>
- <html>
- <head>
- <title>登录</title>
- </head>
- <body>
- <h2>登录</h2>
- <form method="post">
- <input type="text" name="username" placeholder="用户名"><br>
- <input type="password" name="password" placeholder="密码"><br>
- <input type="submit" value="登录">
- </form>
- </body>
- </html>
复制代码
|