基于Flask的问答系统的设计与实现

这篇具有很好参考价值的文章主要介绍了基于Flask的问答系统的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这个项目刚开始是跟着哔哩哔哩上的一个教程学习的,后面完成初步实现后,我按照自己的设计加入了新的功能。

数据表

mysql

用户表(user)
基于Flask的问答系统的设计与实现,Python学习,flask,python
问题表(question)
基于Flask的问答系统的设计与实现,Python学习,flask,python
回答表(answer)
基于Flask的问答系统的设计与实现,Python学习,flask,python
回复表(reply)
基于Flask的问答系统的设计与实现,Python学习,flask,python
邮箱验证码表(email_captcha)
基于Flask的问答系统的设计与实现,Python学习,flask,python

redis

问题浏览数量
基于Flask的问答系统的设计与实现,Python学习,flask,python
问题评论数量
基于Flask的问答系统的设计与实现,Python学习,flask,python

项目展示

注册登录

基于Flask的问答系统的设计与实现,Python学习,flask,python

基于Flask的问答系统的设计与实现,Python学习,flask,python

首页

最热文章列表按照文章浏览数量从高到低排列,点击文章标题,进入文章详情页,文章浏览数量+1。
基于Flask的问答系统的设计与实现,Python学习,flask,python

问题详情页

发布评论及回复,问题的评论数量+1
基于Flask的问答系统的设计与实现,Python学习,flask,python

问题回答及回复

可以评论问题,也可以回复别人的评论。查看回复和收起回复
基于Flask的问答系统的设计与实现,Python学习,flask,python

搜索功能

基于Flask的问答系统的设计与实现,Python学习,flask,python

发布问题功能

问题内容为Markdown格式,就和写博客这个格式一样,目前我没有加入上传图片的功能。
基于Flask的问答系统的设计与实现,Python学习,flask,python

评论我的功能

不能删除别人的评论和回复,这个点击删除会显示错误,这里的删除按钮我后面再去除掉。点击文章标题就可以跳转到别人评论你的文章。
基于Flask的问答系统的设计与实现,Python学习,flask,python

回复我的功能

同上面的“评论我的功能”
基于Flask的问答系统的设计与实现,Python学习,flask,python

我的文章功能

对于自己发布的文章提供编辑和删除功能,删除后文章不复存在,对应的评论和回复一并删除。评论数量和浏览数量也同时删除。
基于Flask的问答系统的设计与实现,Python学习,flask,python

编辑文章功能

编辑问题内容后,点击发布,内容会更新。
基于Flask的问答系统的设计与实现,Python学习,flask,python

我的评论功能

删除自己发布的评论后,相对应的回复一并删除,同时相对应的文章减去删除的评论和回复的数量。
基于Flask的问答系统的设计与实现,Python学习,flask,python

我的回复功能

删除自己发布的回复,相对应的文章减去删除的回复数量。
基于Flask的问答系统的设计与实现,Python学习,flask,python

后台管理功能

基于Flask的问答系统的设计与实现,Python学习,flask,python
基于Flask的问答系统的设计与实现,Python学习,flask,python

源代码目录

基于Flask的问答系统的设计与实现,Python学习,flask,python

requirements.txt文件

alembic==1.10.3
blinker==1.6.2
click==8.1.3
colorama==0.4.6
dnspython==2.3.0
email-validator==1.3.1
Flask==2.2.3
Flask-Admin==1.6.1
Flask-Mail==0.9.1
Flask-Migrate==4.0.4
Flask-SQLAlchemy==3.0.3
Flask-WTF==1.1.1
greenlet==2.0.2
idna==3.4
itsdangerous==2.1.2
Jinja2==3.1.2
Mako==1.2.4
MarkupSafe==2.1.2
mistune==2.0.5
PyMySQL==1.0.3
SQLAlchemy==2.0.9
typing_extensions==4.5.0
Werkzeug==2.2.3
WTForms==3.0.1

app.py文件

from flask import Flask, session, g
import config
from exts import db, mail, admin,compress
from models import UserModel
from blueprints.qa import bp as qa_bp
from blueprints.auth import bp as auth_bp
from blueprints.manage import bp as manage_bp
from flask_migrate import Migrate

app = Flask(__name__)
# 绑定配置文件
app.config.from_object(config)
migrate = Migrate(app, db)
'''
迁移三部曲flask db init(初始执行一次即可);flask db migrate;flask db upgrade;
'''
compress.init_app(app)
db.init_app(app)
mail.init_app(app)
admin.init_app(app)
app.register_blueprint(qa_bp)
app.register_blueprint(auth_bp)
app.register_blueprint(manage_bp)
@app.before_request
def before_request():
    user_id = session.get('user_id')
    if user_id:
        user = UserModel.query.filter_by(id=user_id).first()
        setattr(g, "user", user)
    else:
        setattr(g, "user", None)
@app.context_processor
def context_processor():
    return {"user": g.user}
if __name__ == '__main__':
    app.run(debug=True)

models.py文件

from exts import db, admin
from datetime import datetime
class UserModel(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(200), nullable=False)
    email = db.Column(db.String(100), nullable=False, unique=True)
    join_time = db.Column(db.DateTime, default=datetime.now)
class EmailCaptchaModel(db.Model):
    __tablename__ = 'email_captcha'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    email = db.Column(db.String(100), nullable=False)
    captcha = db.Column(db.String(100), nullable=False)
class QuestionModel(db.Model):
    __tablename__ = 'question'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False, index=True)  # 添加索引
    content = db.Column(db.Text, nullable=False)
    content_html = db.Column(db.Text, nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now, index=True)  # 添加索引
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"), index=True)  # 添加索引
    author = db.relationship(UserModel, backref="question")
class AnswerModel(db.Model):
    __tablename__ = 'answer'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.Text, nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now, index=True)  # 添加索引
    question_id = db.Column(db.Integer, db.ForeignKey("question.id"), index=True)  # 添加索引
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"), index=True)  # 添加索引
    question = db.relationship(QuestionModel, backref=db.backref('answers', order_by=create_time.desc()))
    author = db.relationship(UserModel, backref="answers")
class ReplyModel(db.Model):
    __tablename__ = 'reply'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.Text, nullable=False)
    question_id = db.Column(db.Integer, db.ForeignKey("question.id"), index=True)  # 添加索引
    answer_id = db.Column(db.Integer, db.ForeignKey("answer.id"), index=True)  # 添加索引
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"), index=True)  # 添加索引
    create_time = db.Column(db.DateTime, default=datetime.now, index=True)  # 添加索引
    answer = db.relationship(AnswerModel, backref=db.backref('replys', order_by=create_time.desc()))
    question = db.relationship(QuestionModel, backref=db.backref('replys', order_by=create_time.desc()))
    author = db.relationship(UserModel, backref="replys")
from flask_admin.contrib.sqla import ModelView
class UserView(ModelView):
    column_list = ['id', 'username', 'email', 'join_time']
admin.add_view(UserView(UserModel, db.session))
admin.add_view(ModelView(QuestionModel, db.session))

大多数代码已经省略(这全部粘贴出来恐怕得几万字)这个项目还有很多不完善的地方,后面有时间我再完善。真是 书到用时方恨少。文章来源地址https://www.toymoban.com/news/detail-552002.html

到了这里,关于基于Flask的问答系统的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包