初学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