国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這是《Flask Web開發(fā)實(shí)戰(zhàn):入門、進(jìn)階與原理解析》這本書中的一個(gè)小項(xiàng)目,我在學(xué)習(xí)后根據(jù)書中的教程實(shí)現(xiàn)了留言板的功能,并結(jié)合我的思路將代碼做了一些調(diào)整。
下面這是實(shí)現(xiàn)后的展示圖片
基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)

設(shè)計(jì)思路

留言板得有一個(gè)表單提供昵稱以及留言的輸入功能,在數(shù)據(jù)庫保存的數(shù)據(jù)應(yīng)該包括(留言ID,昵稱,留言內(nèi)容,留言時(shí)間),然后還需要有一個(gè)搜索留言內(nèi)容的功能。后端使用python flask,前端使用html+css+js和bootstrap,數(shù)據(jù)庫使用mysql。
項(xiàng)目結(jié)構(gòu)如下
基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)

項(xiàng)目代碼

exts.py

引入了flask_sqlalchemy,flask_moment,flask_bootstrap這三個(gè)庫,具體的作用及使用可以參考pypi網(wǎng)站。

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

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

models.py

設(shè)計(jì)數(shù)據(jù)庫中數(shù)據(jù)表(可以有多個(gè)),數(shù)據(jù)表名message,四個(gè)字段
(id:留言id,整型,主鍵,自增;
name:昵稱,字符型,長(zhǎng)度20,非空;
body:留言內(nèi)容,字符型,長(zhǎng)度200,非空;
timestamp:留言創(chuàng)建的時(shí)間,日期類型,默認(rèn)值提交留言的時(shí)間,索引)

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:昵稱輸入框,非空,長(zhǎng)度1-20;body:留言輸入框,非空,長(zhǎng)度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

設(shè)計(jì)訪問錯(cuò)誤時(shí)顯示的頁面,如訪問不存在的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的留言板的設(shè)計(jì)與實(shí)現(xiàn)

commands.py

在這個(gè)代碼里,設(shè)置了一個(gè)生成虛擬留言數(shù)據(jù)的功能,主要用于在開發(fā)項(xiàng)目時(shí)測(cè)試留言板功能是否正常,如留言搜索功能,分頁功能,留言時(shí)間顯示功能等等(手動(dòng)添加測(cè)試數(shù)據(jù)很麻煩,一兩條還好說,一兩千條手動(dòng)添加耗時(shí)且枯燥。)
使用方法,在命令行(windows cmd,或者linux 打開終端,pycharm下方的終端…等等)進(jìn)入到項(xiàng)目app.py所在的目錄,運(yùn)行命令flask forge 生成default條虛擬數(shù)據(jù)(代碼中default我設(shè)置為了20);flask forge --count xxx 生成xxx條虛擬數(shù)據(jù)。這個(gè)項(xiàng)目大概幾百幾千條測(cè)試數(shù)據(jù)就足夠了。

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:用于保護(hù) Flask 應(yīng)用程序的安全。它是一個(gè)用于加密和解密數(shù)據(jù)的隨機(jī)字符串。
作用:

  1. 保護(hù)表單數(shù)據(jù)免受跨站點(diǎn)請(qǐng)求偽造 (CSRF) 攻擊。
  2. 對(duì)用戶會(huì)話數(shù)據(jù)進(jìn)行加密和解密,以保護(hù)用戶數(shù)據(jù)的安全性。

在 Flask 應(yīng)用程序中,SECRET_KEY 的值應(yīng)該是隨機(jī)生成的,足夠長(zhǎng),復(fù)雜度高,不易被猜測(cè)到。注意在正式開發(fā)中不要暴露像SECRET_KEY這種配置的值,不要把真實(shí)的值提交到github或者放在博客中等等。切記!
下面我給一個(gè)SECRET_KEY值的生成代碼,你們可以參考使用:

# import secrets
# # 生成一個(gè)16字節(jié)長(zhǎng)的隨機(jī)字符串作為 SECRET_KEY
# secret_key = secrets.token_hex(16)
# print(secret_key)

config.py文件里設(shè)置SECRET_KEY以及數(shù)據(jù)庫的配置信息

SECRET_KEY = "xxx"#自定義

# 數(shù)據(jù)庫配置信息
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'messageboard' #數(shù)據(jù)庫名稱
USERNAME = 'xxxx'
PASSWORD = 'xxxx'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI

app.py

在flask應(yīng)用文件里將flask應(yīng)用程序和使用的擴(kuò)展相結(jié)合。
flask_migrate是一個(gè)Flask擴(kuò)展,它提供了一個(gè)簡(jiǎn)單的命令行接口來管理應(yīng)用程序的數(shù)據(jù)庫遷移。前面寫過,models.py文件是數(shù)據(jù)表的定義文件,里面定義了數(shù)據(jù)表的表名,字段名等等。
如果你編寫了models.py文件要在數(shù)據(jù)庫中生成數(shù)據(jù)表,在終端命令行里依次運(yùn)行flask db init;flask db migrate;flask db upgrade。這時(shí)數(shù)據(jù)庫中就會(huì)出現(xiàn)數(shù)據(jù)表。
如果你已經(jīng)運(yùn)行了flask db init;后面如果你修改了models.py文件,只需要運(yùn)行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(初始執(zhí)行一次即可);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()

其中下面這兩段代碼是導(dǎo)入并注冊(cè)藍(lán)圖,藍(lán)圖下面再解釋。

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

Blueprint 藍(lán)圖

Flask Blueprints是一種組織Flask應(yīng)用程序的方法,它將應(yīng)用程序分解為可重用的模塊。Blueprints可以包含路由、模板、靜態(tài)文件和其他與應(yīng)用程序相關(guān)的代碼。Blueprints使得在Flask應(yīng)用程序中添加和刪除功能更加容易,同時(shí)也使得應(yīng)用程序更加模塊化和可維護(hù)。Blueprints還可以用于將應(yīng)用程序分解為多個(gè)子應(yīng)用程序,以便更好地管理和擴(kuò)展應(yīng)用程序。
基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)
在我這個(gè)項(xiàng)目中,使用pycharm的話是新建名為blueprints的python軟件包。新建目錄的話也可以,你得手動(dòng)新建__init__.py文件。
messages.py文件表示留言子應(yīng)用程序,如果以后添加用戶注冊(cè)登錄的功能,那么就新建一個(gè)auth.py用戶子應(yīng)用程序。
messages.py部分內(nèi)容
基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)

static和templates文件

基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)

完整代碼

我不確定有沒有人對(duì)我寫的這篇文章感興趣,如果需要我寫的更完整一些,麻煩點(diǎn)贊評(píng)論哦~我看情況再更新。你們的支持就是我創(chuàng)作的動(dòng)力?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-428416.html

到了這里,關(guān)于基于Flask的留言板的設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 個(gè)人博客留言板功能實(shí)現(xiàn)

    個(gè)人博客留言板功能實(shí)現(xiàn)

    因?yàn)檫@個(gè)博客是用的大佬的開源項(xiàng)目,我也是用自己的想法改了很多東西,雖然可能寫的不是很好,但是我自己想要的效果實(shí)現(xiàn)了,開源項(xiàng)目不就是用來學(xué)習(xí)的嘛,所以不能一層不變,之前首頁改版、評(píng)論功能我都沒有寫文章,這次抽空更新了留言板功能,來水一篇文章。

    2024年02月08日
    瀏覽(24)
  • JSP實(shí)驗(yàn):實(shí)現(xiàn)留言板功能,顯示留言者和留言內(nèi)容

    JSP實(shí)驗(yàn):實(shí)現(xiàn)留言板功能,顯示留言者和留言內(nèi)容

    form.jsp為登錄界面、為賬號(hào)密碼創(chuàng)建JavaBean、doForm.jsp(無界面)為登錄處理,假定正確的用戶名為admin,口令為123,用戶輸入正確則重定向到messageBoard.jsp(留言板頁面),進(jìn)行留言。錯(cuò)誤則返回到登錄界面。showMessage.jsp實(shí)現(xiàn)留言展示功能,展示留言者、留言標(biāo)題、留言內(nèi)容。 u

    2024年02月03日
    瀏覽(19)
  • 【JavaEEj進(jìn)階】 Spring實(shí)現(xiàn)留言板

    【JavaEEj進(jìn)階】 Spring實(shí)現(xiàn)留言板

    可以發(fā)布并顯示 顯示后實(shí)現(xiàn)輸入框的清除 并且再次刷新后,不會(huì)清除下面的緩存 這里由于博主主要從事后端相關(guān)工作,這里就不做過多講解了 相關(guān)知識(shí)點(diǎn)可以參考博主寫的【JavaEE初階】 JavaScript相應(yīng)的WebAPI中表白墻的書寫 如果有看不懂的地方也可以找博主,博主也略知一二

    2024年01月19日
    瀏覽(21)
  • JS——利用JS實(shí)現(xiàn)簡(jiǎn)易留言板

    JS——利用JS實(shí)現(xiàn)簡(jiǎn)易留言板

    文章目錄 前言 一 、 成果圖 二、使用步驟 1. 需求解析 2. HTML結(jié)構(gòu) 3.CSS樣式 4.JS行為 總結(jié) ? 實(shí)現(xiàn)留言板的基本功能 提交留言—— 用戶輸入留言(當(dāng)輸入內(nèi)容為空時(shí),提示用戶,且不可提交留言),輸入完成后點(diǎn)擊提交留言,留言列表中將會(huì)出現(xiàn)對(duì)應(yīng)用戶輸入的內(nèi)容,且留言

    2024年02月11日
    瀏覽(34)
  • 自學(xué)WEB后端02-基于Express框架完成一個(gè)交互留言板!

    自學(xué)WEB后端02-基于Express框架完成一個(gè)交互留言板!

    提示: 瀏覽器V8是JavaScript的前端運(yùn)行環(huán)境 Node.js 是JavaScript 的后端運(yùn)行環(huán)境 Node.js 中無法調(diào)用 DOM 和 BOM等瀏覽器內(nèi)置 API 這個(gè)作業(yè)案例包含2部分內(nèi)容, 第一部分是前端 前端完成界面內(nèi)容+CSS框架 第二部分是后端 完成用戶留言存儲(chǔ),并返回 我這里為了方便放在了后端myapp目錄

    2024年02月08日
    瀏覽(20)
  • HTML+PHP+MYSQL實(shí)現(xiàn)一個(gè)簡(jiǎn)單的留言板

    HTML+PHP+MYSQL實(shí)現(xiàn)一個(gè)簡(jiǎn)單的留言板

    提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加 大家好,下面將為大家展示 基于HTML PHP MYSQL的留言板的設(shè)計(jì)與實(shí)現(xiàn)過程,適合初學(xué)者點(diǎn)擊觀看,以下我將會(huì)以筆者自稱! 提示:寫完文章后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 提示:

    2024年02月04日
    瀏覽(23)
  • 使用Spring+SpringMVC+Mybatis實(shí)現(xiàn)留言板的增刪改查

    使用Spring+SpringMVC+Mybatis實(shí)現(xiàn)留言板的增刪改查

    目的 1)掌握使用maven來創(chuàng)建SSM項(xiàng)目 2)掌握web.xml和pom.xml的使用 3)掌握Spring、SpringMVC和Mybatis,學(xué)會(huì)整合SSM 4)掌握的controller層注解@Autowired,@RequestMapping和@RequestParam的使用 5)用學(xué)會(huì)配置SpringMVC.xml、applicationContext.xml和mybatis-config.xml等配置文件 6)掌握spring+springMVC+mybatis 對(duì)于留言板

    2024年02月04日
    瀏覽(62)
  • 網(wǎng)站留言板的功能

    網(wǎng)站留言板的功能

    開發(fā)環(huán)境:dreamweaverCC html +jscirpt + php 前置條件:1、一個(gè)簡(jiǎn)單的網(wǎng)站已經(jīng)搭建完畢,支持用戶登錄網(wǎng)站。 2、用戶已登錄網(wǎng)站。 實(shí)現(xiàn)步驟: 一、新建留言板網(wǎng)頁 1、新建網(wǎng)頁:whiteboard.html 留言板(js-div-whiteboard)分為三個(gè)部分: 留言列表:(js-div-whiteboard-messages)、無留言提示

    2024年02月07日
    瀏覽(18)
  • bugku-web-留言板

    bugku-web-留言板

    ?留言板?第一反應(yīng)就是XSS 或者跨站腳本攻擊 ?確定為XSS? ?(說點(diǎn)什么)“說”了就會(huì)記錄下來??? 簡(jiǎn)單測(cè)試下 ?利用工具跑一下這個(gè)網(wǎng)頁? (dirsearch) 得到了登錄頁? admin.php ?需要用戶名和口令 ? 在我們跑出的另一個(gè)文件里? db.sql? (db.sql建議多pao幾次? 還可進(jìn)行burp s

    2024年02月12日
    瀏覽(19)
  • BUGKU-WEB 留言板1

    BUGKU-WEB 留言板1

    題目截圖如下: 進(jìn)入場(chǎng)景看看: 之間寫過一題類似的,所以這題應(yīng)該是有什么不同的 那就按照之前的思路進(jìn)行測(cè)試試試 提示說:需要xss平臺(tái)接收flag,這個(gè)和之前說的提示一樣 xss平臺(tái):https://xssaq.com 對(duì)xss的一些繞過進(jìn)行學(xué)習(xí)了解 輸入測(cè)試一下script代碼: 發(fā)現(xiàn)script被過濾了

    2024年02月21日
    瀏覽(115)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包