读书笔记-FLASK-留言板

本文介绍了使用Python的Flask框架构建一个简单的留言板应用的过程,包括项目结构、数据库设计、视图函数、页面表单以及HTML模板的创建。通过用户输入的用户名和留言内容,提交后在页面展示。应用采用mysql+pymysql数据库连接,源码可在GitHub找到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

买了flask相关的两本书,一本狼,一本狗,开始对flask进行学习。

直接翻到案例篇,大致浏览下思路,咱的目标是参照思路自己写。

留言板

实现功能:用户输入用户名和留言内容,提交后,在页面上展示出来。

项目结构

数据库

models.py

from datetime import datetime
from sayhello import db

class Message(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    body = db.Column(db.String(200))
    name = db.Column(db.String(20))
    timestamp = db.Column(db.DateTime,default=datetime.now,index=True)

#创建数据库表格
#db.create_all()

直接用db.create_all()就可以创建表格了

创建app

__init.py__

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap

app = Flask('sayhello')
app.secret_key = 'ni cai cai'
#配置数据库信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://flask:123456@127.0.0.1:3306/flasktest?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
bootstrap = Bootstrap(app)

from sayhello import views,errors

原来练习的时候都是写在同一个文件里的,一个app.py承包一个文件。但是将视图函数分开来后,必须在这里加入最后一行。


from sayhello import views,errors

不然到时候路由就找不到了。

那为什么要写在最后一行呢?书里写的很清楚避免出现互相引用出错的情况。

我这里用的python3.6,连接的是mysql,用的库是pymysql

所以在数据库地址那块要写成mysql+pymysql。

视图函数

分两个文件,一个用来定义首页,一个用来定义错误页面

views.py

from flask import flash,redirect,url_for,render_template

from sayhello.models import Message
from sayhello.forms import HelloForm
from sayhello import app,db

@app.route('/',methods=['GET','POST'])
def index():
    form = HelloForm()
    if form.validate_on_submit():
        name = form.name.data
        body = form.body.data
        message = Message(body=body,name=name)
        db.session.add(message)
        db.session.commit()
        flash('留言提交成功')
        return redirect(url_for('index'))
    messages =Message.query.order_by(Message.timestamp.desc()).all()
    return render_template('index.html',form=form,messages=messages)

errors.py

from sayhello import app
from flask import render_template
@app.errorhandler(404)
def page_not_found(e):
    return render_template('errors/404.html'), 404


@app.errorhandler(500)
def internal_server_error(e):
    return render_template('errors/500.html'), 500

页面表单

froms.py

这里的form就是后面在html里面展示的结构,用户名,留言内容,还有提交

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


class HelloForm(FlaskForm):
    name = StringField('name',validators=[DataRequired(),Length(1,20)])
    body = TextAreaField('message',validators=[DataRequired(),Length(1,200)])
    submit = SubmitField()

html

分base.html ,index.html,404.html,500.html

均以base.html为基础。

base.html

通过{% block %}{%endblock%}来预留位置。

其他页面继承基础页,需要替换内容时,直接替换block中的内容。

例如index.html里,继承的是block content

表单提交操作,注释掉的那块和{{ render_form(form,method="POST") }}的效果是一样的

通过for循环加载留言信息

运行效果:

源码地址:https://github.com/jojo201808/sayhello

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值