本练手项目的码云地址为 : https://gitee.com/fuyi2333/flask
鉴于本人学的为纯后端 对于前端的理解很少 这里被迫无奈只要显示出信息 就算完成
分析 :一个标准的留言板
有姓名 留言内容 提交
其他人留言的内容 留言时间
我们首先
配置数据库
db.init_app(app)
with app.app_context(): #上下文创建数据库
db.create_all()
以及在配置文件中配置数据库地址 具体配置在flask基础数据库中
配置表单内容
在上面提到的create_app()中添加
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired, Length
class MessagesForm(FlaskForm):
name = StringField(label='用户名', validators=[
DataRequired(), Length(1, 20, message='请输入正确的名称')],
render_kw={'placeholder': '请输入你的名字'}
)
body = StringField(label='留言', validators=[
DataRequired(), Length(1, 100, message='你输入的内容过长或过短')],
render_kw={'placeholder': '留下你想说的话'}
)
submit = SubmitField('留言')
上述表单实现了对于输入验证留言的验证
数据库配置
from datetime import datetime
from sqlalchemy import Column
from blog.models import db
class Message(db.Model):
id = Column(db.Integer,primary_key=True)
name = Column(db.String(20))
body = Column(db.String(100))
timestamp = Column(db.DateTime, default=datetime.now,index=True)
上述数据库实现了保存姓名 内容 和 时间
视图函数
from flask import flash, redirect, url_for, render_template
from blog.forms.messages import MessagesForm
from blog.models import db
from blog.models.messages import Message
from blog.view import web
@web.route('/', methods=['GET', 'POST'])
def blog():
form = MessagesForm()
messages = Message.query.order_by(Message.timestamp.desc()).all()
# 排序方法
if form.validate_on_submit():
name = form.name.data
body = form.body.data
message = Message(name=name, body=body)
db.session.add(message)
db.commit() # 提交会话
flash('留言成功')
return redirect(url_for('blog')) # 留言成功后重定向刷新页面
return render_template('hello.html', form=form, messages=messages)
表单和数据库读取数据
html文件显示
非常丑陋的html文件如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>留言板</title>
</head>
<body>
<a>------------------------------------------------------</a>
{% for i in messages %}
<p>
{{ i.name }}<br>
{{ i.body }}<br>
{{ i.timestamp }}<br>
<a>------------------------------------------------------</a>
</p>
{% endfor %}
<form method="post">
{{ form.csrf_token }}
{# #这里为验证安全性#}
{{ form.name.label }}<br>
{{ form.name }}<br><br>
{{ form.body.label }}<br>
{{ form.body }}<br><br>
{{ form.submit }}<br>
</form>
</body>
</html>
做出来的效果如下