基于Flask的留言板的设计与实现

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

这是《Flask Web开发实战:入门、进阶与原理解析》这本书中的一个小项目,我在学习后根据书中的教程实现了留言板的功能,并结合我的思路将代码做了一些调整。
下面这是实现后的展示图片
基于Flask的留言板的设计与实现

设计思路

留言板得有一个表单提供昵称以及留言的输入功能,在数据库保存的数据应该包括(留言ID,昵称,留言内容,留言时间),然后还需要有一个搜索留言内容的功能。后端使用python flask,前端使用html+css+js和bootstrap,数据库使用mysql。
项目结构如下
基于Flask的留言板的设计与实现

项目代码

exts.py

引入了flask_sqlalchemy,flask_moment,flask_bootstrap这三个库,具体的作用及使用可以参考pypi网站。

from flask_sqlalchemy import SQLAlchemy
from flask_moment import Moment
from flask_bootstrap import Bootstrap5

db = SQLAlchemy()
moment = Moment()
bootstrap = Bootstrap5()

models.py

设计数据库中数据表(可以有多个),数据表名message,四个字段
(id:留言id,整型,主键,自增;
name:昵称,字符型,长度20,非空;
body:留言内容,字符型,长度200,非空;
timestamp:留言创建的时间,日期类型,默认值提交留言的时间,索引)

from datetime import datetime
from exts import db

class Message(db.Model):
	__tablename__ = 'message'#指定表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False)
    body = db.Column(db.String(200), nullable=False)
    timestamp = db.Column(db.DateTime, default=datetime.now, index=True)

forms.py

提交留言的表单,name:昵称输入框,非空,长度1-20;body:留言输入框,非空,长度1-200;submit:提交按钮,显示值为提交留言。

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, TextAreaField
from wtforms.validators import DataRequired, Length

class HelloForm(FlaskForm):
    name = StringField('昵称', validators=[DataRequired(), Length(1, 20)])
    body = TextAreaField('留言', validators=[DataRequired(), Length(1, 200)])
    submit = SubmitField('提交留言')

errors.py

设计访问错误时显示的页面,如访问不存在的url等等。

from flask import render_template

def page_not_found(e):
    return render_template('errors/404.html'), 404
    
def internal_server_error(e):
    return render_template('errors/500.html'), 500

如下图所示
基于Flask的留言板的设计与实现

commands.py

在这个代码里,设置了一个生成虚拟留言数据的功能,主要用于在开发项目时测试留言板功能是否正常,如留言搜索功能,分页功能,留言时间显示功能等等(手动添加测试数据很麻烦,一两条还好说,一两千条手动添加耗时且枯燥。)
使用方法,在命令行(windows cmd,或者linux 打开终端,pycharm下方的终端…等等)进入到项目app.py所在的目录,运行命令flask forge 生成default条虚拟数据(代码中default我设置为了20);flask forge --count xxx 生成xxx条虚拟数据。这个项目大概几百几千条测试数据就足够了。

import click
from exts import db

@click.command()
@click.option('--count', default=20, help='Quantity of messages, default is 20.')
def forge(count):
    """Generate fake messages."""
    from faker import Faker
    from models import Message
    db.drop_all()
    db.create_all()
    fake = Faker()
    click.echo('Working...')
    for i in range(count):
        message = Message(
            name=fake.name(),
            body=fake.sentence(),
            timestamp=fake.date_time_this_year()
        )
        db.session.add(message)
    db.session.commit()
    click.echo('Created %d fake messages.' % count)

config.py

SECRET_KEY:用于保护 Flask 应用程序的安全。它是一个用于加密和解密数据的随机字符串。
作用:

  1. 保护表单数据免受跨站点请求伪造 (CSRF) 攻击。
  2. 对用户会话数据进行加密和解密,以保护用户数据的安全性。

在 Flask 应用程序中,SECRET_KEY 的值应该是随机生成的,足够长,复杂度高,不易被猜测到。注意在正式开发中不要暴露像SECRET_KEY这种配置的值,不要把真实的值提交到github或者放在博客中等等。切记
下面我给一个SECRET_KEY值的生成代码,你们可以参考使用:

# import secrets
# # 生成一个16字节长的随机字符串作为 SECRET_KEY
# secret_key = secrets.token_hex(16)
# print(secret_key)

config.py文件里设置SECRET_KEY以及数据库的配置信息

SECRET_KEY = "xxx"#自定义

# 数据库配置信息
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'messageboard' #数据库名称
USERNAME = 'xxxx'
PASSWORD = 'xxxx'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI

app.py

在flask应用文件里将flask应用程序和使用的扩展相结合。
flask_migrate是一个Flask扩展,它提供了一个简单的命令行接口来管理应用程序的数据库迁移。前面写过,models.py文件是数据表的定义文件,里面定义了数据表的表名,字段名等等。
如果你编写了models.py文件要在数据库中生成数据表,在终端命令行里依次运行flask db init;flask db migrate;flask db upgrade。这时数据库中就会出现数据表。
如果你已经运行了flask db init;后面如果你修改了models.py文件,只需要运行flask db migrate;flask db upgrade即可。

from flask import Flask, redirect, url_for
from exts import db, moment, bootstrap
import config
from blueprints.messages import messages as messages_bp
from flask_migrate import Migrate
from commands import forge
from errors import page_not_found, internal_server_error

app = Flask(__name__)
app.config.from_object(config)
migrate = Migrate(app, db)
'''
迁移三部曲flask db init(初始执行一次即可);flask db migrate;flask db upgrade;
'''
db.init_app(app)
moment.init_app(app)
bootstrap.init_app(app)

app.register_blueprint(messages_bp)

app.cli.add_command(forge)
app.errorhandler(404)(page_not_found)
app.errorhandler(500)(internal_server_error)

@app.route('/')
def index(page=None):
    return redirect(url_for('messages.index'))

if __name__ == '__main__':
    app.run()

其中下面这两段代码是导入并注册蓝图,蓝图下面再解释。

from blueprints.messages import messages as messages_bp
app.register_blueprint(messages_bp)

Blueprint 蓝图

Flask Blueprints是一种组织Flask应用程序的方法,它将应用程序分解为可重用的模块。Blueprints可以包含路由、模板、静态文件和其他与应用程序相关的代码。Blueprints使得在Flask应用程序中添加和删除功能更加容易,同时也使得应用程序更加模块化和可维护。Blueprints还可以用于将应用程序分解为多个子应用程序,以便更好地管理和扩展应用程序。
基于Flask的留言板的设计与实现
在我这个项目中,使用pycharm的话是新建名为blueprints的python软件包。新建目录的话也可以,你得手动新建__init__.py文件。
messages.py文件表示留言子应用程序,如果以后添加用户注册登录的功能,那么就新建一个auth.py用户子应用程序。
messages.py部分内容
基于Flask的留言板的设计与实现

static和templates文件

基于Flask的留言板的设计与实现

完整代码

我不确定有没有人对我写的这篇文章感兴趣,如果需要我写的更完整一些,麻烦点赞评论哦~我看情况再更新。你们的支持就是我创作的动力!!!文章来源地址https://www.toymoban.com/news/detail-428416.html

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

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

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

相关文章

  • 个人博客留言板功能实现

    因为这个博客是用的大佬的开源项目,我也是用自己的想法改了很多东西,虽然可能写的不是很好,但是我自己想要的效果实现了,开源项目不就是用来学习的嘛,所以不能一层不变,之前首页改版、评论功能我都没有写文章,这次抽空更新了留言板功能,来水一篇文章。

    2024年02月08日
    浏览(28)
  • JSP实验:实现留言板功能,显示留言者和留言内容

    form.jsp为登录界面、为账号密码创建JavaBean、doForm.jsp(无界面)为登录处理,假定正确的用户名为admin,口令为123,用户输入正确则重定向到messageBoard.jsp(留言板页面),进行留言。错误则返回到登录界面。showMessage.jsp实现留言展示功能,展示留言者、留言标题、留言内容。 u

    2024年02月03日
    浏览(24)
  • 【JavaEEj进阶】 Spring实现留言板

    可以发布并显示 显示后实现输入框的清除 并且再次刷新后,不会清除下面的缓存 这里由于博主主要从事后端相关工作,这里就不做过多讲解了 相关知识点可以参考博主写的【JavaEE初阶】 JavaScript相应的WebAPI中表白墙的书写 如果有看不懂的地方也可以找博主,博主也略知一二

    2024年01月19日
    浏览(33)
  • JS——利用JS实现简易留言板

    文章目录 前言 一 、 成果图 二、使用步骤 1. 需求解析 2. HTML结构 3.CSS样式 4.JS行为 总结   实现留言板的基本功能 提交留言—— 用户输入留言(当输入内容为空时,提示用户,且不可提交留言),输入完成后点击提交留言,留言列表中将会出现对应用户输入的内容,且留言

    2024年02月11日
    浏览(33)
  • 自学WEB后端02-基于Express框架完成一个交互留言板!

    提示: 浏览器V8是JavaScript的前端运行环境 Node.js 是JavaScript 的后端运行环境 Node.js 中无法调用 DOM 和 BOM等浏览器内置 API 这个作业案例包含2部分内容, 第一部分是前端 前端完成界面内容+CSS框架 第二部分是后端 完成用户留言存储,并返回 我这里为了方便放在了后端myapp目录

    2024年02月08日
    浏览(32)
  • HTML+PHP+MYSQL实现一个简单的留言板

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 大家好,下面将为大家展示 基于HTML PHP MYSQL的留言板的设计与实现过程,适合初学者点击观看,以下我将会以笔者自称! 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:

    2024年02月04日
    浏览(36)
  • 使用Spring+SpringMVC+Mybatis实现留言板的增删改查

    目的 1)掌握使用maven来创建SSM项目 2)掌握web.xml和pom.xml的使用 3)掌握Spring、SpringMVC和Mybatis,学会整合SSM 4)掌握的controller层注解@Autowired,@RequestMapping和@RequestParam的使用 5)用学会配置SpringMVC.xml、applicationContext.xml和mybatis-config.xml等配置文件 6)掌握spring+springMVC+mybatis 对于留言板

    2024年02月04日
    浏览(79)
  • 网站留言板的功能

    开发环境:dreamweaverCC html +jscirpt + php 前置条件:1、一个简单的网站已经搭建完毕,支持用户登录网站。 2、用户已登录网站。 实现步骤: 一、新建留言板网页 1、新建网页:whiteboard.html 留言板(js-div-whiteboard)分为三个部分: 留言列表:(js-div-whiteboard-messages)、无留言提示

    2024年02月07日
    浏览(34)
  • bugku-web-留言板

     留言板?第一反应就是XSS 或者跨站脚本攻击  确定为XSS   (说点什么)“说”了就会记录下来    简单测试下  利用工具跑一下这个网页  (dirsearch) 得到了登录页  admin.php  需要用户名和口令   在我们跑出的另一个文件里  db.sql  (db.sql建议多pao几次  还可进行burp s

    2024年02月12日
    浏览(28)
  • BUGKU-WEB 留言板1

    题目截图如下: 进入场景看看: 之间写过一题类似的,所以这题应该是有什么不同的 那就按照之前的思路进行测试试试 提示说:需要xss平台接收flag,这个和之前说的提示一样 xss平台:https://xssaq.com 对xss的一些绕过进行学习了解 输入测试一下script代码: 发现script被过滤了

    2024年02月21日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包