标签:传递 内容 cot post 保存数据 xxxx 转化 上传头像 错误
管理信息系统
一、 系统概要说明
该网站是由Python+Flask+MysqL的web建设技术开发的。本系统是一个实用的个人博客网站,集博客、评论、于一身。未注册的用户只可以浏览文章,注册成为该系统的用户,可以发表文章、评论,上传头像,修改密码,点赞收藏。布局简单,样式简介。
二、 网站结构设计
网站统一布局:头部导航条、底部图片导航、中间主体内容区域
用户未登录时,头部导航为首页、登录、注册、问答和组合搜索,用户登录后,头部导航为首页、更改信息、个人中心、退出、问答和组合搜索。
中间主体内容区域,是不同html的组合,点击导航上的各个功能,进入不同的html。首页通过文章的标题,可进入文章详情页,进行留言、点赞和收藏。
三、 模块详细设计
js文件中,onclick函数return True时才提交表单,return False时不提交表单。在页面当中,<form>中设置 action和method="post",<input> 中设置 name
在主py文件中,设置方法,获取form中的数据,判断用户名是否存在,不存在则存到数据库中,再重新定向登录页;存在则提示错误信息。
在登录页面,在form设置action和method=“post”,在input设置用户名密码
在主py文件:@app.route设置login methods,GET的方法得到页面,POST发回读取表单数据,查询数据库,用户名密码是否正确,正确则跳转到首页;不正确则提示错误。
在页面form表单中,需要指定`encotype=‘multipart/form-data‘`才能上传文件。后台代码中查询到该用户,获取文件所在目录的完整路径,其中 os.path.dirname(__file__)函数用于取出主文件的位置,在用os.path.join()函数将该位置和后面指定的‘static/uploads‘ 字符串连接一起,获取图像路径。
定义修改密码的函数,查找该用户进行修改从而修改密码
编写要求登录的装饰器,要求登录才能发布文章,未登录则跳转至登录页面。
在发布页面,在form设置action和method,在input设置用户id,分类id,文章标题及内容等等,通过主py文件session.add添加到数据库,保存数据库,重新定向到数据库。
在主py文件,定义评论的视图函数,读取前端页面数据,保存到数据库中
首页列表显示全部问答:将数据库查询结果传递到前端页面 question.query.all(),前端页面循环显示整个列表,按照时间排序全部问答
问答详情页:包含该问答全部信息,推荐文章,评论区,评论区列表,点赞收藏等
四、 数据库设计
SQLAlchemy 是一个 Python 包,其最底层包装了对数据库进入操作的统一接口,然后在最上层提供了对象关系映射(ORM)的实现。Python的 ORM框架SQLAlchemy,可以让我们操作数据库跟操作对象一样方便。
该博客系统使用了Navicat for MySQL 的软件,在mysql创建数据库mis1515。
建立mysql和app的连接,在数据库配置信息config.py中加入以下配置。
在config.py中加入以下两项配置:
SQLALCHEMY_DATABASE_URI= = ‘mysql+pymysql://root:xxxxx@localhost:3306/mis1515?charset=utf8‘
SQLALCHEMY_TRACK_MODIFICATIONS = False
在主py(mis1515.py)中加入
import config
app.config.from_object(‘config‘)
db = SQLAlchemy(app)
测试是否连接成功 db.create_all()
各个表之间的关联
各个表的数据类型
分类表:文章的分类,便于查询,字段包括分类名称和内容
收藏表:用户可以收藏喜欢的文章,字段包括该收藏的文章id,用户id
评论表:字段包括评论的用户id,问题的id及其评论内容
问答表:字段包括标题,内容,发表的用户,文章的分类名,浏览数,点赞数
用户表:字段为用户名,密码,评论次数,用户头像
五、 系统实现的关键算法与数据结构
查找对象时,通过Flask-SQLAlchemy提供的一个query属性,当你通过model类的query属性,你可以得到一个数据库表的查询结果集,再使用filter对结果进行过滤。这个查找大量运用在这个系统,包括搜索功能。
user = User.query.filter(User.id == user_id).first()
query = Question.query.filter( or_(
Question.title.contains(qu),
Question.detail.contains(qu),
) .order_by(‘-creat_time‘).all()
加密算法:将密码明文转化为hash码
from werkzeug.security import generate_password_hash, check_password_hash
@property
def password(self): #外部使用
return self._password
@password.setter
def password(self, row_password):
self._password = generate_password_hash(row_password)
def check_password(self, row_password):
result = check_password_hash(self._password,row_password)
return result
六、 成品展示
首页页面可以看到不同用户发表的简略问答,右边可以根据你选择的分类而显示该类别的文章
注册页面,输入账号和密码,符合条件即可注册跳转至登录页面
登录页面,输入正确的账号和密码即可登录成功,并跳转至首页
用户可以上传喜欢的头像和更改密码
个人中心页面可以看到个人的问答、评论、收藏及信息
发布问答页面,用户可以发布自己问题或文字,显示在首页的文章列表中。
评论页,用户点击文章进入详情页,即可点赞收藏及评论,也可以看到其他用户的评论内容。
标签:传递 内容 cot post 保存数据 xxxx 转化 上传头像 错误
原文地址:https://www.cnblogs.com/qianshu/p/9190482.html