背景
flask如何将部分页面鉴权后才能访问,笔者通过Flask-login实现,下面一起来看看是如何实现的吧。
系统环境
- win-11
- python 3.8
依赖安装
pip install flask
pip install flask-login
pip install flask-sqlalchemy
pip install sqlalchemy-utils
pip install click
pip install Werkzeug
页面展示
登录页面
登陆后页面
导入bootstrap依赖 和 html页面
# 新一个文件夹
# 新文件夹下创建staice文件夹用于存放bootstrap依赖,文件夹下再创建三个文件夹为:css、js、images
# 新文件夹下创建templates文件夹用于存放html文件
# 相关文件请通过云盘下载
# 文件目录结构
├─static
│ ├─css
│ ├─images
│ └─js
├─templates
配置app.py文件
导入相关模块,定义secrets 并配置ORM
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import LoginManager, login_user, login_required, logout_user, UserMixin
import sqlalchemy_utils
import os
import sys
import click
app = Flask(__name__)
'''
自动生成secret
import secrets
print(secrets.token_hex(32))
'''
app.secret_key = b'12313123131241414141241fsfgsfsdfsfs'
# 判断系统类型
WIN = sys.platform.startswith('win')
if WIN: # 如果是 Windows 系统,使用三个斜线
prefix = 'sqlite:///'
else: # 否则使用四个斜线
prefix = 'sqlite:'
# sqlite:///数据库文件的绝对地址,如果你使用 Windows 系统只需要写入三个斜线(即 sqlite:///)
app.config['SQLALCHEMY_DATABASE_URI'] = prefix + os.path.join(app.root_path, 'data.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭对模型修改的监控
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
user_type = db.Column(db.String(255))
username = db.Column(db.String(255))
password_hash = db.Column(db.String(128)) # 密码散列值
def set_password(self, password): # 用来设置密码的方法,接受密码作为参数
self.password_hash = generate_password_hash(password) # 将生成的密码保持到对应字段
def validate_password(self, password): # 用于验证密码的方法,接受密码作为参数
return check_password_hash(self.password_hash, password) # 返回布尔值
定义手动创建管理用户模块
# 使用 click.option() 装饰器设置的两个选项分别用来接受输入用户名和密码。执行 flask admin 命令,输入用户名和密码后,即可创建管理员账户。
@app.cli.command()
&#