Windows下Flask代码因crypt模块不支持报错的解决求助
解决Windows下Flask连接SQLite时的crypt模块导入错误
错误根源
你代码第一行导入的from crypt import methods是Unix系统专属的加密模块,Windows不支持该模块,且这个导入和Flask的请求方法(POST/GET)完全无关——Flask的请求方法判断靠request.method实现,根本不需要这个导入,这就是报错的核心原因。
代码调整点
- 删除第一行错误的导入语句
from crypt import methods - 修正
Todo类的__repr__方法:你当前用了self.id但模型里没定义id字段,换成模型已有的主键字段Registration - 修正
index函数创建Todo实例的代码:模型里没有content字段,对应你定义的name字段(需和表单输入字段匹配) - 将
SQLALCHEMY_TRACK_MODIFICATIONS = False加入app.config配置,否则无法生效
修正后的完整代码
from distutils.log import debug from flask import Flask, render_template, request, url_for, redirect from flask_sqlalchemy import SQLAlchemy from datetime import datetime app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///reg.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 正确配置消除警告 db = SQLAlchemy(app) class Todo(db.Model): name = db.Column(db.String(200), nullable=False) Bdate = db.Column(db.Integer(), nullable=False) Gender = db.Column(db.String(6), nullable=False) Class = db.Column(db.String(9), nullable=False) Registration = db.Column(db.Integer(), primary_key=True) date_created = db.Column(db.DateTime, default=datetime.utcnow) def __repr__(self): return '<Task %r>' % self.Registration # 替换为存在的主键字段 @app.route('/', methods=['POST','GET']) def index(): if request.method == "POST": task_content = request.form['card-body'] # 这里需要根据表单实际提交的字段补充其他必填项,示例用默认值占位 new_task = Todo(name=task_content, Bdate=0, Gender="", Class="") try: db.session.add(new_task) db.session.commit() return redirect('/') except Exception as e: return f"发生错误: {str(e)}" # 显示具体错误便于调试 else: tasks = Todo.query.order_by(Todo.date_created).all() return render_template('index.html', tasks=tasks) if __name__ == "__main__": with app.app_context(): db.create_all() # 启动时自动创建数据库表 app.run(debug=True)
额外提示
创建Todo实例时,示例里用了默认值填充必填字段,你需要根据前端表单实际提交的字段,从request.form中获取对应的值(比如request.form['Bdate'])。
内容的提问来源于stack exchange,提问作者Punda
相关产品推荐
相关产品推荐

