系统的首要目标就是可用性,本系统是一个关于书评的网站,能够展示每位读者的书评以及发表书评,为各位用户提供各种书籍的书评以及读书心得,正所谓一千个人的眼里有一千个哈姆雷特,也是对读书的精华浓缩,集思广益,提高阅读的质量和氛围;
(2)系统设计的简易性
系统面向的用户主要为普通用户,因此在操作性方面应该尽可能的简单,降低复杂性以防止用户不会操作的问题,同时操作简易也会让用户觉得系统容易使用,提高普及度。所以系统应该拥有简洁的界面、方便的菜单列表以及协调的颜色搭配;
1.2概要说明
书评网站的总体目标是为用户提供一个开放注册的在线阅读读者的读书心得,主要有以下功能:
二、网站结构设计
三、模块详细设计
1.首页
首页属于前端模块,在apps/front目录下的views.py文件也就是视图那里定义了了首页的方法,在首页我们要展示用户发布过的帖子,所以就要获取到帖子的信息,将数据传到html页面,再在首页的html进行显示,下面是代码。
@bp.route('/')defindex():board_id=request.args.get('bd',type=int,default=None)page=request.args.get(get_page_parameter(),type=int,default=1)boards=BoardModel.query.all()start=(page-1)*config.PER_PAGEend=start+config.PER_PAGEtotal=0query_obj=PostModel.query.order_by(PostModel.create_time.desc())ifboard_id:query_obj=query_obj.filter_by(board_id=board_id)posts=query_obj.slice(start,end)total=query_obj.count()else:posts=query_obj.slice(start,end)total=query_obj.count()pagination=Pagination(bs_version=3,page=page,total=total,outer_window=0,inner_window=2)context={'boards':boards,'posts':posts,'pagination':pagination,'current_board':board_id}returnrender_template('front/front_index.html',**context)
2.帖子发布模块
deflogin_required(func):@wraps(func)definner(*args,**kwargs):ifconfig.FRONT_USER_IDinsession:returnfunc(*args,**kwargs)else:returnredirect(url_for('front.signin'))returninner帖子发布的设计用到AJAX异步请求的方法,Ajax是一种用于创建快速动态网页的技术。
Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
在发布帖子的时候先去到表单文件进行板块的判断,如果没有这个板块就会阻止表单的提交,如果判断正确就会将发布的内容提交添加进数据库,并返回发布成功的页面提示。
#发布帖子@bp.route('/apost/',methods=['GET','POST'])@login_requireddefapost():ifrequest.method=='GET':boards=BoardModel.query.all()returnrender_template('front/front_apost.html',boards=boards)else:form=AddPostForm(request.form)ifform.validate():title=form.title.datacontent=form.content.databoard_id=form.board_id.databoard=BoardModel.query.get(board_id)ifnotboard:returnrestful.params_error(message='没有这个板块!')post=PostModel(title=title,content=content)post.board=boardpost.author=g.front_userdb.session.add(post)db.session.commit()returnrestful.success()else:returnrestful.params_error(message=form.get_error())3。搜索
搜索功能通过在页面上获取输入框所输入的值然后使用上下文context将值放到里面去,在页面进行循环,如果有这个关键字就进行显示,否则不展示。
个人中心页面获取用户ID然后根据这个ID再获取到这个用户的其他信息,将其放到context然后再将它显示在前端页面
#个人中心@bp.route('/usercenter/
6.点赞与收藏
#点赞功能@bp.route('/dianzan/',methods=['GET','POST'])@login_requireddefdianzan():user_id=g.front_user.idpost_id=request.form.get('post_id')dianzan=DianzanModel(user_id=user_id,post_id=post_id)db.session.add(dianzan)db.session.commit()returnredirect(url_for('front.post_detail',post_id=post_id))#收藏功能@bp.route('/collection/',methods=['GET','POST'])@login_requireddefcollection():user_id=g.front_user.idpost_id=request.form.get('post_id')collection=CollectionModel(user_id=user_id,post_id=post_id)db.session.add(collection)db.session.commit()returnredirect(url_for('front.post_detail',post_id=post_id))
点赞与收藏都是通过获取到点赞者的ID然后通过标的联系将数据插入到点赞表跟收藏表之中,显示的时候就通过显示这个用户ID的记录的总和来展示有多少个人点赞或者收藏。
四、数据库设计
在表的联系方面合理定义主键外键,使得我么么可以使用一个表的主键跟外键的联系获得另一个表的信息,就实现了可以根据用户ID来查看他所发表的帖子这一类的功能。
五、成品展示
首页界面:
帖子发布界面:
帖子详细页面:
搜索功能:
个人中心:
修改信息页面:
密码修改页面:
头像修改:
分页功能:
六、心得体会
通过这次的课程设计,我对flask框架的pythonweb设计有了更深一层的了解。在这次的课程设计中使用了AJAX,Ajax相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对XMLHttpRequest有所了解。
XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
Ajax的使用大大提高了数据的传输速度,使得数据不堵塞,使得整个系统使用起来更加的流畅。
一个好的网站是要通过很多次的维护与完善才能做出来的,还有很多的算法以及一些类库的使用我不是很熟练,对于熟练掌握这门技术还是有比较大的距离,我会继续提高自己的学习能力,把这项技术继续学习到精通,为将来发展打下好的基础。