如何进行网站建设和推广,wordpress 的分享插件,抖音seo排名系统哪个好用,山西省住房与城乡建设厅网站这是《Flask Web开发实战:入门、进阶与原理解析》这本书中的一个小项目#xff0c;我在学习后根据书中的教程实现了留言板的功能#xff0c;并结合我的思路将代码做了一些调整。 下面这是实现后的展示图片 文章目录 设计思路项目代码exts.pymodels.pyforms.pyerrors.pycomma…这是《Flask Web开发实战:入门、进阶与原理解析》这本书中的一个小项目我在学习后根据书中的教程实现了留言板的功能并结合我的思路将代码做了一些调整。 下面这是实现后的展示图片 文章目录 设计思路项目代码exts.pymodels.pyforms.pyerrors.pycommands.pyconfig.pyapp.py Blueprint 蓝图static和templates文件完整代码 设计思路
留言板得有一个表单提供昵称以及留言的输入功能在数据库保存的数据应该包括留言ID昵称留言内容留言时间然后还需要有一个搜索留言内容的功能。后端使用python flask前端使用htmlcssjs和bootstrap数据库使用mysql。 项目结构如下
项目代码
exts.py
引入了flask_sqlalchemyflask_momentflask_bootstrap这三个库具体的作用及使用可以参考pypi网站。
from flask_sqlalchemy import SQLAlchemy
from flask_moment import Moment
from flask_bootstrap import Bootstrap5db SQLAlchemy()
moment Moment()
bootstrap Bootstrap5()models.py
设计数据库中数据表可以有多个数据表名message四个字段 id留言id整型主键自增 name昵称字符型长度20非空 body留言内容字符型长度200非空 timestamp留言创建的时间日期类型默认值提交留言的时间索引
from datetime import datetime
from exts import dbclass Message(db.Model):__tablename__ message#指定表名id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)name db.Column(db.String(20), nullableFalse)body db.Column(db.String(200), nullableFalse)timestamp db.Column(db.DateTime, defaultdatetime.now, indexTrue)forms.py
提交留言的表单name昵称输入框非空长度1-20body留言输入框非空长度1-200submit提交按钮显示值为提交留言。
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, TextAreaField
from wtforms.validators import DataRequired, Lengthclass 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_templatedef page_not_found(e):return render_template(errors/404.html), 404def internal_server_error(e):return render_template(errors/500.html), 500如下图所示
commands.py
在这个代码里设置了一个生成虚拟留言数据的功能主要用于在开发项目时测试留言板功能是否正常如留言搜索功能分页功能留言时间显示功能等等手动添加测试数据很麻烦一两条还好说一两千条手动添加耗时且枯燥。 使用方法在命令行windows cmd或者linux 打开终端pycharm下方的终端…等等进入到项目app.py所在的目录运行命令flask forge 生成default条虚拟数据代码中default我设置为了20flask forge --count xxx 生成xxx条虚拟数据。这个项目大概几百几千条测试数据就足够了。
import click
from exts import dbclick.command()
click.option(--count, default20, helpQuantity of messages, default is 20.)
def forge(count):Generate fake messages.from faker import Fakerfrom models import Messagedb.drop_all()db.create_all()fake Faker()click.echo(Working...)for i in range(count):message Message(namefake.name(),bodyfake.sentence(),timestampfake.date_time_this_year())db.session.add(message)db.session.commit()click.echo(Created %d fake messages. % count)config.py
SECRET_KEY用于保护 Flask 应用程序的安全。它是一个用于加密和解密数据的随机字符串。 作用
保护表单数据免受跨站点请求伪造 (CSRF) 攻击。对用户会话数据进行加密和解密以保护用户数据的安全性。
在 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 mysqlpymysql://{}:{}{}:{}/{}?charsetutf8.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI DB_URIapp.py
在flask应用文件里将flask应用程序和使用的扩展相结合。 flask_migrate是一个Flask扩展它提供了一个简单的命令行接口来管理应用程序的数据库迁移。前面写过models.py文件是数据表的定义文件里面定义了数据表的表名字段名等等。 如果你编写了models.py文件要在数据库中生成数据表在终端命令行里依次运行flask db initflask db migrateflask db upgrade。这时数据库中就会出现数据表。 如果你已经运行了flask db init后面如果你修改了models.py文件只需要运行flask db migrateflask 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_errorapp 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(pageNone):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还可以用于将应用程序分解为多个子应用程序以便更好地管理和扩展应用程序。 在我这个项目中使用pycharm的话是新建名为blueprints的python软件包。新建目录的话也可以你得手动新建__init__.py文件。 messages.py文件表示留言子应用程序如果以后添加用户注册登录的功能那么就新建一个auth.py用户子应用程序。 messages.py部分内容
static和templates文件 完整代码
我不确定有没有人对我写的这篇文章感兴趣如果需要我写的更完整一些麻烦点赞评论哦~我看情况再更新。你们的支持就是我创作的动力