基于flask的在线笔记共享管理系统
【4】(数据库操作类介绍)
每次对数据进行操做都要进行 ( 连接数据库–>执行sql语句–>关闭数据库 )的操作。建立一个操作类方便使用。
文件名:mysql_util.py
import pymysql # 引入pymysql模块
import traceback # 引入python中的traceback模块,跟踪错误
import sys # 引入sys模块
class MysqlUtil():
def __init__(self):
'''
初始化方法,连接数据库
'''
host = '127.0.0.1' # 主机名
user = 'root' # 数据库用户名
password = '12345678' # 数据库密码
database = 'cloudnotes' # 数据库名称
self.db = pymysql.connect(host=host,user=user,password=password,db=database) # 建立连接
self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor) # 设置游标,并将游标设置为字典类型
def insert(self, sql):
'''
插入数据库
sql:插入数据库的sql语句
'''
try:
# 执行sql语句
self.cursor.execute(sql)
# 提交到数据库执行
self.db.commit()
except Exception: # 方法一:捕获所有异常
# 如果发生异常,则回滚
print("发生异常", Exception)
self.db.rollback()
finally:
# 最终关闭数据库连接
self.db.close()
def fetchone(self, sql):
'''
查询数据库:单个结果集
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
'''
try:
# 执行sql语句
self.cursor.execute(sql)
result = self.cursor.fetchone()
except: # 方法二:采用traceback模块查看异常
# 输出异常信息
traceback.print_exc()
# 如果发生异常,则回滚
self.db.rollback()
finally:
# 最终关闭数据库连接
self.db.close()
return result
def fetchall(self, sql):
'''
查询数据库:多个结果集
fetchall(): 接收全部的返回结果行.
'''
try:
# 执行sql语句
self.cursor.execute(sql)
results = self.cursor.fetchall()
except: # 方法三:采用sys模块回溯最后的异常
# 输出异常信息
info = sys.exc_info()
print(info[0], ":", info[1])
# 如果发生异常,则回滚
self.db.rollback()
finally:
# 最终关闭数据库连接
self.db.close()
return results
def delete(self, sql):
'''
删除结果集
'''
try:
# 执行sql语句
self.cursor.execute(sql)
self.db.commit()
except: # 把这些异常保存到一个日志文件中,来分析这些异常
# 将错误日志输入到目录文件中
f = open("\log.txt", 'a')
traceback.print_exc(file=f)
f.flush()
f.close()
# 如果发生异常,则回滚
self.db.rollback()
finally:
# 最终关闭数据库连接
self.db.close()
def update(self, sql):
'''
更新结果集
'''
try:
# 执行sql语句
self.cursor.execute(sql)
self.db.commit()
except:
# 如果发生异常,则回滚
self.db.rollback()
finally:
# 最终关闭数据库连接
self.db.close()
【4】(表单类介绍)
Forms.py文件创立俩个常用的form表单类模板。为系统功能实现提供方便。
from wtforms import Form, StringField, TextAreaField, PasswordField
from wtforms.validators import DataRequired,Length,Email,EqualTo
# Article Form Class
class ArticleForm(Form):
title = StringField(
'标题',
validators=[
# DataRequired(message= '标题长度应该在2-30字符之间'),
DataRequired(message='长度不少于5个字符'),
Length(min=2,max=30)
]
)
content = TextAreaField(
'内容',
validators=[
DataRequired(message='长度不少于5个字符'),
Length(min=5)
]
)
# Register Form Class
class RegisterForm(Form):
username = StringField(
'用户名',
validators=[
DataRequired(message='请输入用户名'),
Length(min=2, max=25,message='长度在2-25个字符之间')
]
)
email = StringField(
'邮箱',
validators = [
DataRequired(message="请输入邮箱"),
Email(message='请输入正确的邮箱格式')
]
)
password = PasswordField(
'密码',
validators = [
DataRequired(message='密码不能为空'),
Length(min=6,max=20,message='长度在6-20个字符之间'),
]
)
confirm = PasswordField(
'确认密码',
validators=[
DataRequired(message='密码不能为空'),
Length(min=6, max=20),
EqualTo('password', message='2次输入密码不一致')
]
)