flask项目——留言板

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_20539533/article/details/88381027

新看的书:Flask Web 开发实战:入门、进阶与原理解析(李辉)

一个非常简单的留言板程序。给的示范的github地址是:https://github.com/greyli/sayhello

web程序开发流程:

1.分析需求,列出功能清单

2.设计程序功能,写程序规格书和技术规格书

3.开发调试

4.调试测试

5.部署上线

6.运行维护。

使用到的python包有Bootstrap-Flask、Flask-Moment、Faker、Flask-DebugToolbar。

linux环境可以新建一个文件夹,进入然后将示例程序复制到本地。

git clone https://github.com/greyli/sayhello.git

进入文件夹,使用pipenv创建虚拟环境,安装所有依赖

cd sayhello
pip install --dev
pipenv shell
flask forge//创建虚拟数据
flask run//运行

假如安装依赖出错,太慢的话可以使用国内的镜像源。

pipenv install --dev --pypi-mirror https://mirrors.aliyun.com/pypi/simple

程序功能设计

留言板。输入要留的信息和姓名提交,将消息加到页面的消息列表中。只有一页,含有表单以及消息。对消息和姓名进行长度限制。消息列表要显示所有消息的数量、消息、发布时间、消息编号、发布者姓名。消息根据时间顺序排序排布,最底部有一个返回页面顶部的按钮。

本人使用的是pycharm,安装的包如下图

如果出现安装失败的情况,尝试给pip更新一下再安装。

这里使用包package创建一个包,包里面含有一个__init__.py文件,直接创建目录没有。创建一个文件夹后创建__init__.py也可以。

示范文件目录。我的这个留言板也是类似的。我的这个的github地址:https://github.com/Golden0monkey/messageB

由于书上的是linux环境下的,我自己的是windows的,有些不同的地方,错误页面什么的就没有制作了。第一次是直接按着书上的敲了代码,然后不能运行。又重新敲(逐个功能增加测试成功后再添加下一个功能),原来跟着一起写的文章就不合适了,只能删掉那部分,重新写,因为这个留言板已经写完了,要进行下一个,这个就不一步一步的写了,直接贴上代码。

__init__.py

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

app = Flask('message')
bootstrap = Bootstrap(app)
moment = Moment(app)

app.config.from_pyfile('nconfig.py')#载入配置文件

db = SQLAlchemy(app)

forms.py

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()

models.py

from datetime import datetime

from message import db


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


def initdb():
    db.create_all()

nconfig.py

import os,sys
from message import app


SECRET_KEY = os.getenv('SECRET_KEY', 'secret string')

WIN = sys.platform.startswith('win')
if WIN:
    prefix = 'sqlite:///'
else:
    prefix = 'sqlite:////'

dev_db = prefix + os.path.join(os.path.dirname(app.root_path), 'data.db')
print(dev_db)
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URI', dev_db)

view.py


from flask import flash,render_template,redirect,url_for

from message import app,db
from message.forms import HelloForm
from message.models import Message,initdb


@app.route('/',methods=['GET','POST'])
def index():
    initdb();
    messages = Message.query.order_by(Message.timestamp.desc()).all()
    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('Your message have been sent to the world!')
        return redirect(url_for('index'))

    return render_template('index.html', form=form, messages=messages)

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

猜你喜欢

转载自blog.csdn.net/qq_20539533/article/details/88381027