Flask留言板Demo

初学Python,用flask框架写了一个留言板,分享出来供大家观赏,希望对大家有帮助

环境搭建
  • pycharm
  • python2.7
  • Navicat
  • mysql
基础知识
  • python
  • html
依赖模块
  • flask
  • jinja2
  • bootstrap
  • flask-login
  • flask-mysql
  • SQLAlchemy
  • Flask-script
留言板功能
  • 登录/注册
  • 注销
  • 留言
  • 会话保持(利用flask-login)
程序架构
/messageboard
    /bbs                  #留言
        /__init__.py
        /form.py
        /views.py
    /reglogin             #登录注册
        /__init__.py
        /form.py
        /views.py
    /static               #静态文件
    /templates            #模板
        /base.html
        /index.html
        /login.html
        /register.html
    __init__.py
    model.py              #数据库
/manage.py                #脚本
/run.py                   #主程序

留言板的实现,主要利用MVC架构,显得程序层次感比较分明

数据库 model.py

留言板的实现,数据库必不可少,一来存储用户信息(用户名和密码),二来存储用户的留言信息

# coding=utf-8
from . import db
from . import login_manager
from datetime import datetime
from flask_login import UserMixin


#用户类
class User(db.Model, UserMixin):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(32))
    salt = db.Column(db.String(32))

    #用户和留言连接,一个用户会有多个留言
    message = db.relationship('Message', backref='user', lazy='dynamic')

    __table_args__ = {
        'mysql_charset': 'utf8'
    }


    def __init__(self, username, password, salt=''):
        self.username = username
        self.password = password
        self.salt = salt

    def __repr__(self):
        return ('<User %d %s>' % (self.id, self.username))


#留言类
class Message(db.Model):
    __tablename__= 'message'
    id = db.Column(db.Integer, primary_key=True)
    #外键
    author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
    msg = db.Column(db.String(1024))
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)

    __table_args__ = {
        'mysql_charset': 'utf8'
    }

    def __init__(self, author_id, msg, timestamp):
        self.author_id = author_id
        self.msg = msg
        self.timestamp = timestamp

    def __repr__(self):
        return ('<Message %d %s>' % (self.id, self.msg))


#login_manager 返回用户对象,回调,无效返回None
@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))
初始配置 init.py
# -*- encoding=UTF-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_bootstrap import Bootstrap

app = None
#db实例化
db = SQLAlchemy(use_native_unicode='utf8')
bootstrap = Bootstrap()
#login-manager处理登入,会话管理,管理长时间记住用户的会话
login_manager = LoginManager()
login_manager.session_protection = 'strong'
# login_view设置登陆页面的端点
login_manager.login_view = 'reglogin.login'

#导入import模块
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

def create_app():
    global app
    # app配置数据库
    app = Flask(__name__, template_folder='templates')
    app.config['SQLALCHEMY_DATABASE_URI'] = '******'  # 配置数据库,数据库的库名和密码,自己补上
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    #secret_key
    app.config['SECRET_KEY'] = 'MONKEY'

    # db初始化
    db.init_app(app)
    bootstrap.init_app(app)
    login_manager.init_app(app)

    # 引入视图和model
    from .reglogin import reglogin_view as log
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值