案例:学生成绩管理

本文介绍了如何使用Flask搭建一个学生成绩管理系统,包括创建项目目录、配置文件、数据库初始化、日志设置、蓝图创建、模型创建以及闪现信息的使用,详细讲解了每个步骤的操作和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例:学生成绩管理

新建项目目录stud, 并创建虚拟环境

mkvirtualenv stud -p python3

安装开发中使用的依赖模块

pip install flask==0.12.4
pip install redis==3.2.1
pip install flask-session==0.3.1
pip install flask-script==2.0.6
pip install flask-mysqldb==0.2.0
pip install flask-sqlalchemy==1.3.4
pip install flask-migrate==2.5.2
pip install flask_wtf==0.14.2

在pycharm中打开项目目录,设置虚拟环境以后,编写manage.py启动项目的文件

 

创建 manage.py 文件

from flask import Flask
​
app = Flask(__name__)
​
@app.route('/index')
def index():
    return 'index'
​
if __name__ == '__main__':
    app.run()

mange.py终不能存放大量的开发代码, 在开发中应该体现的是一种分工精神,所以我们可以把flask中各种功能代码进行分类分文件存储.

创建项目目录结构:

项目根目录/
├── application/            # 项目主要逻辑代码保存目录
|   ├── settings/           # 项目配置存储目录
│   │   ├ dev.py            # 开发阶段的配置文件
│   │   ├ prop.py           # 生产阶段的配置文件
│   ├── __init__.py         # 项目初始化文件
├── manage.py               # 项目的终端管理脚本文件

 

配置文件

settings/__init__.py代码:

from redis import StrictRedis
​
class Config(object):
    """项目配置核心类"""
    # 调试模式
    DEBUG = True
​
    # todo 配置日志
    pass
​
    # mysql数据库的配置信息
    SQLALCHEMY_DATABASE_URI = ""
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO= False
​
    # 配置redis
    REDIS_HOST = '127.0.0.1'  # 项目上线以后,这个地址就会被替换成真实IP地址,mysql也是
    REDIS_PORT = 6379
​
    # 设置密钥,可以通过 base64.b64encode(os.urandom(48)) 来生成一个指定长度的随机字符串
    SECRET_KEY = "ghhBljAa0uzw2afLqJOXrukORE4BlkTY/1vaMuDh6opQ3uwGYtsDUyxcH62Aw3ju"
​
    # flask_session的配置信息
    SESSION_TYPE = "redis" # 指定 session 保存到 redis 中
    SESSION_USE_SIGNER = True # 让 cookie 中的 session_id 被加密签名处理
    SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT,db=1) # 使用 redis 的实例
    PERMANENT_SESSION_LIFETIME = 24 * 60 * 60 # session_id的有效期,单位是秒

 

settings/dev.py`代码:

from . import Config
class DevelopementConfig(Config):
    """开发模式下的配置"""
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO= True
    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/stud?charset=utf8"

settings/prop.py代码:

from . import Config
class ProductionConfig(Config):
    """生产模式下的配置"""
    DEBUG = False
    REDIS_HOST = '127.0.0.1'

 

项目主应用中初始化项目

application/__init__.py文件中,创建flask应用并加载配置

from flask import Flask
from application.settings.dev import DevelopementConfig
from application.settings.prop import ProductionConfig
​
config = {
    "dev": DevelopementConfig,
    "prop": ProductionConfig,
}
​
def init_app(config_name):
    """项目的初始化函数"""
    app = Flask(__name__)
​
    # 设置配置类
    Config = config.get(config_name)
​
    # 加载配置
    app.config.from_object(Config)
​
    return app

在manage.py 中调用 init_app 函数,启动项目

from application import init_app
​
app = init_app("dev")
​
@app.route("/")
def index():
    return "index"
​
if __name__ == '__main__':
    app.run()

 

application/__init__.py项目初始化文件中加载redis或者mysql的初始化代码

from flask import Flask
from redis import StrictRedis
from flask_wtf.csrf import CSRFProtect
from flask_session import Session
​
from application.settings.dev import DevelopementConfig
from application.settings.prop import ProductionConfig
​
config = {
    "dev": DevelopementConfig,
    "prop": ProductionConfig,
}
​
# 为了方便redis的连接对象在函数外部可以使用,预先设置一个全局变量,接下来在函数中用于保存redis的连接
redis_store = None
​
def init_app(config_name):
    """项目的初始化功能"""
    app = Flask(__name__)
​
    # 设置配置类
    Config = config[config_name]
​
    # 加载配置
    app.config.from_object(Config)
​
    # redis的链接初始化
    global redis_store
    redis_store = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT,db=0)
​
    # 开启CSRF防范功能
    CSRFProtect(app)
​
    # 开启session功能
    Session(app)
​
    # TODO 注册蓝图对象到app应用中
​
    return app

调整了redis的加载,把redis的配置信息和初始化代码进行分离

新建文件application/utils/flask_redis,代码:

from redis import StrictRedis
def get_redis_connection(option):
    return StrictRedis(host=option['HOST'], port=option['PORT'], db=option['DB'])

application/settings/__init__.py,代码:

from redis import StrictRedis
from application.utils.flask_redis import get_redis_connection
class Config(object):
    """项目的公共配置核心类"""
    # 调试模式
    DEBUG = True
​
    # todo 配置日志
    pass
​
    # mysql数据库的配置信息
    SQLALCHEMY_DATABASE_URI = ""
    # 动态追踪修改设置,如未设
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值