项目7:“古典文学网”书评功能开发_第1页
项目7:“古典文学网”书评功能开发_第2页
项目7:“古典文学网”书评功能开发_第3页
项目7:“古典文学网”书评功能开发_第4页
项目7:“古典文学网”书评功能开发_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目7:“古典文学网”书评功能开发XXX202X-XX-XX

目录02.任务1:开发书评展示功能05.拓展任务03.任务2:开发书评发表功能04.任务3:开发书评评价功能01.知识储备:Flask框架的中间件、消息闪现机制及ElementPlus框架核心UI组件

学习目标知识目标:了解Flask框架的中间件,并熟练掌握其应用方法;了解Flask框架的缓存机制,熟练掌握其原理及使用;了解ElementPlus前端框架的组件,掌握常用组件的配置和使用。能力目标:通过学习Flask框架的中间件,能够在项目中实现高级别的控制和定制;通过学习Flask框架的缓存机制,能够在项目中提升开发效率和代码质量;通过学习ElementPlus的组件,能够构建出高效、美观且用户友好的前端界面。素质目标:培养系统思维,严格遵守行业规范和标准,提高软件质量和可靠性;培养责任感、职业精神和团队精神,遵守职业道德。01项目描述

1.1.项目需求小白将在之前开发工作的基础上,完成“古典文学网”项目的“书评”模块的开发,包括书评展示、书评发表以及书评评价等功能。02知识储备

2.知识储备为了项目的顺利开发,小白需要掌握Flask框架的中间件、消息闪现机制及ElementPlus框架核心UI组件

2.1.Flask框架的中间件Flask框架的中间件是FlaskWeb应用的核心组件之一,它可以在不改变现有视图逻辑的前提下,允许我们在处理HTTP请求和响应的过程中插入自定义的逻辑或操作,如身份验证、日志记录、请求预处理等。接下来,我们将创建一个名为SimpleMiddleware的中间件,并展示如何应用它。以下是其关键代码示例:classSimpleMiddleware:

def__init__(self,app):

self.app=app

def__call__(self,environ,start_response):

#请求处理前的操作

......

response=self.app(environ,start_response)

#请求处理后的操作

......

returnresponse

2.1.Flask框架的中间件若需要使用SimpleMiddleware中间件,我们只需将其添加到app实例中。以下是具体的实现代码示例:fromflaskimportFlaskfromSimpleMiddlewareimportSimpleMiddleware

app=Flask(__name__)#将中间件附加到Flask应用app.wsgi_app=SimpleMiddleware(app.wsgi_app)

2.2.Flask框架的消息闪现消息闪现(FlashMessages)是一种高效机制,用于在多个请求之间传递一次性消息。这些消息通常用于在重定向后向用户展示一次性的通知,如表单提交成功、验证失败等关键信息。在Flask中,我们可以通过flash()函数在一个请求中设置消息,并在随后的请求中利用get_flashed_messages()函数来检索并展示这些消息,从而为用户提供即时的反馈。

2.2.Flask框架的消息闪现接下来,我们开发一个消息闪现的案例,通过模拟登录操作来演示该机制的工作方式。当登录成功后,利用消息闪现技术将登录成功的消息传递至主页。以下是具体的实现步骤。首先,我们创建一个名为“HI_FLASH”的Flask项目,并构建其项目框架目录。该项目的整体结构如图7.1所示。图7.1“HI_FLASH”项目的框架目录

2.2.Flask框架的消息闪现logo接下来,我们打开app.py文件,开发index()和login()两个视图函数,用以处理首页展示和登录操作的请求。具体代码如下所示:fromflaskimportFlask,flash,redirect,render_template,request,url_forapp=Flask(__name__)app.secret_key='randomstring'@app.route('/')defindex():returnrender_template('index.html')@app.route('/login',methods=['GET','POST'])deflogin():#错误提示error=None#判断请求方式,POST请求方式为登录操作ifrequest.method=='POST':#获取账号及密码uname=request.form['uname']upwd=request.form['upwd']#模拟登录操作,内置账号为admin,密码为123456ifuname!='admin'andupwd!='123456':error='用户名或密码有误。请重新登录!'else:#消息闪现,传递消息到首页

flash('您已成功登录!')#跳转至首页returnredirect(url_for('index'))returnrender_template('login.html',error=error)if__name__=='__main__':#启动服务,设置主机和端口app.run(host="",port=5000,debug=True)

2.2.Flask框架的消息闪现logo接下来,我们找到“/templates/login.html”文件,开发用户登录页面。以下是其具体代码实现:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>用户登录</title></head><body><h1>登录页面</h1>{%iferror%}<p><strong>Error:</strong>{{error}}{%endif%}<formaction="/login"method="POST"><dl><dt>用户名:</dt><dd><inputtype=textname="uname"></dd><dt>密码:</dt><dd><inputtype="password"name="upwd"></dd></dl><p><inputtype="submit"value="登录"></p></form></body></html>

2.2.Flask框架的消息闪现logo紧接着,我们找到项目的/templates/index.html文件,开发项目的首页功能。以下是其具体代码实现:<!DOCTYPEhtml><htmllang="en"><head>

<metacharset="UTF-8">

<title>用户登录</title></head><body>

<!--显示闪现消息-->

{%withmessages=get_flashed_messages()%}

{%ifmessages%}

<ulclass=flashes>

{%formessageinmessages%}

<li>{{message}}</li>

{%endfor%}

</ul>

{%endif%}

{%endwith%}<h1>首页</h1><p>

您想要<ahref="{{url_for('login')}}"><b>登录?</b></a></p></body></html>

2.2.Flask框架的消息闪现logo最终,我们启动Flask应用,通过访问“:5000/login”来进入登录页面,执行登录操作。一旦登录成功,跳转至首页后,会相应地显示“您已成功登录!”的闪现消息。运行结果如图7.2(a)和图7.2(b)所示。图7.2(a)登录页面图7.2(b)首页显示闪现消息页面

2.3ElementPlus框架常用组件logoText文本组件Text文本组件是用于执行文本常见操作的核心组件。通过el-text标签,该组件能够展示文本的多种样式和操作。特别地,用户可以通过设置type属性来选择Text组件的文本类型,以满足不同的展示和交互需求。接下来,我们将利用Text文本组件来开发不同类型的文本显示页面。设计效果如图7.3所示。图7.3Text文本组件运行效果

2.3ElementPlus框架常用组件logoText文本组件<template><el-textclass="mx-1">Default</el-text><el-textclass="mx-1"type="primary">Primary</el-text><el-textclass="mx-1"type="success">Success</el-text><el-textclass="mx-1"type="info">Info</el-text><el-textclass="mx-1"type="warning">Warning</el-text><el-textclass="mx-1"type="danger">Danger</el-text></template>图7.3Text文本组件运行效果

2.3ElementPlus框架常用组件logoInput输入框Input是一个用于输入文本信息的组件。Input组件提供了多种属性和事件,以满足不同的输入需求。Input组件具有以下一些常用属性和事件,见表7.1,表7.2。属性说明type类型,与原生input类型相同,例如v-model绑定值placeholder输入框占位文本clearable是否显示清除按钮,只有当type不是'textareadisabled是否禁用size输入框尺寸,只在type不为'textarea'时有效show-password是否显示切换密码图标name等价于原生inputname属性autosizetextarea高度是否自适应,仅type为'textarea'时生效表7.1Input组件的常用属性表7.2Input组件的常用事件事件说明blur当选择器的输入框失去焦点时触发focus当选择器的输入框获得焦点时触发change仅当modelValue改变时,当输入框失去焦点或用户按Enter时触发

2.3ElementPlus框架常用组件logoInput输入框接下来,我们利用Input组件,开发一个文本输入框,它使用type、placeholder、v-model、clearable等属性。设计效果如图7.4所示。图7.4Image图片组件运行效果源代码详情如下:<template><el-inputv-model="input"style="width:240px"placeholder="Pleaseinput"clearable/></template><scriptlang="ts"setup>import{ref}from'vue'constinput=ref('')</script>

2.3ElementPlus框架常用组件logoRadio单选框Radio单选框组件通常用于提供用户单选数据的操作,比如用户在完善资料时性别的选择。Radio单选框组件具有以下一些常用属性和事件,见表7.3,表7.4。表7.3Radio组件的常用属性属性说明v-model绑定值value单选框的值label单选框的label如果value没有值,label则作为value使用disabled是否禁用单选框size单选框的尺寸name原始name属性表7.4Radio组件的常用事件事件说明change绑定值变化时触发的事件

2.3ElementPlus框架常用组件logoRadio单选框接下来,我们将结合el-radio-group元素和el-radio子元素可以实现一组单选按钮组。设计效果如图7.5所示。图7.5Radio单选框组件运行效果源代码详情如下:<template><el-radio-groupv-model="radio"><el-radio:value="3">OptionA</el-radio><el-radio:value="6">OptionB</el-radio><el-radio:value="9">OptionC</el-radio></el-radio-group></template><scriptlang="ts"setup>import{ref}from'vue'constradio=ref(3)</script>

2.2.ElementPlus框架常用组件logoDescriptions描述列表

Descriptions描述列表组件用于以列表形式展示多个字段。它使用el-descriptions和el-descriptions-item标签来布局列表页面。

接下来,我们将利用Descriptions描述列表组件来开发一个列表展示页面。设计效果如图7.6所示。图7.6Descriptions描述列表组件运行效果

2.2.ElementPlus框架常用组件logoDescriptions描述列表上图所展示的网页布局所对应的源代码详情如下:<template><el-descriptionstitle="UserInfo"><el-descriptions-itemlabel="Username">kooriookami</el-descriptions-item><el-descriptions-itemlabel="Telephone">lt;/el-descriptions-item><el-descriptions-itemlabel="Place">Suzhou</el-descriptions-item><el-descriptions-itemlabel="Remarks"><el-tagsize="small">School</el-tag></el-descriptions-item><el-descriptions-itemlabel="Address">No.1188,WuzhongAvenue,WuzhongDistrict,Suzhou,JiangsuProvince</el-descriptions-item></el-descriptions></template>03项目任务小白马上要着手于项目的“书评”功能模块的开发工作。由于该功能模块涉及项目前后端的协同开发,这无疑是一次严峻的挑战。

3.1开发书评展示功能1.需求描述在文学作品页面中,我们需要开发文学作品的评论列表展示功能。该功能将呈现当前文学作品的评论信息,包括了评论数量、评论者信息、评论内容以及一系列便捷的操作按钮,确保用户能够全面、直观地浏览和了解该文学作品的评论。运行效果如图7.7所示。图7.7文学评论展示效果

3.1开发书评展示功能任务步骤:1.需求描述2.开发书评展示API接口3.开发书评展示功能

3.1.1开发书评展示功能1.需求描述在开发该功能时,我们需要使用后端项目的API接口,具体API接口信息见表7.5所示。表7.5开发过程中调用的API接口表接口调用方式说明书评展示API接口http://ip地址:端口/api/classics/get-discuss/<int:cid>本节进行开发图片显示API接口http://ip地址:端口/api/image/display/<string:type>/<string:filename>请参考项目2中的“2.3.5.开发图片显示API接口”小节

3.1.2开发书评展示API接口1.需求描述该API接口通过文学作品编号(cid)在数据库中检索文学评论表(discuss),获取指定文学作品的详尽评论信息返回给客户端。此外,接口在获取评论信息后,还会进一步查询与之相关的评论用户信息,以确保最终返回的数据集能够完全符合前端应用的需求。该API接口的说明请参照表7.6。功能说明书评展示API接口调用路径http://ip地址:端口/api/classics/get-discuss/<int:cid>HTTP请求方式GET请求数据类型application/x-www-form-urlencoded请求数据参数参数名类型长度描述必须cidint文学作品编号■返回数据类型application/json返回数据参数参数名类型长度描述必须codevarchar状态码,200正确,其他错误■msgvarchar返回消息内容■dataarray返回文学评论列表■请求示例:5000/api/classics/get-discuss/1返回数据JSON(样例){

"code":"200","msg":"操作成功!","data":[

{

"did":1,

"comment":"我喜欢!",

"lowcount":0,

"topcount":0,......

"user":{

"uid":1,

"uname":"xiaobai",

"avatar":"tx.png",

"nikename":"小白",

}

},......}表7.6书评展示API接口说明表

3.1.2开发书评展示API接口2.开发数据操作模块在"cls_svr"项目中,我们找到“app/dao/ClassicsDao.py”文件。在该文件中,我们开发查询文学评论列表的功能。以下是实现该功能所需的关键代码:......fromapp.model.modelsimportDiscuss#数据库操作类classClassicsDao:

......

#9.获取某文学作品的评论列表defgetDiscussByCid(self,cid):

try:#排序查询:按评论时间从高到低排序

discuss=Discuss.query.filter(Discuss.cid==cid).order_by(Discuss.cdate.desc()).all()returndiscussexceptExceptionase:print(e)pass

3.1.2开发书评展示API接口3.开发业务逻辑模块在“cls_svr”项目中,请找到“/app/api/classics_blueprint.py”的文学蓝图文件。在这个蓝图中,我们将定义用于查询文学评论列表信息的视图函数,实现API接口。以下是实现该功能的关键代码:fromapp.dao.UsersDaoimportUsersDaofromapp.model.modelsimportUsers,UsersSchema......#按文学作品,获取文学评论列表@classics_blueprint.route('/get-discuss/<int:cid>')defget_discuss(cid):#返回信息result_msg={"code":"200","msg":"操作成功!"}#判断请求及参数是否正确ifcidisNone:result_msg["code"]="404"result_msg["msg"]="参数错误"returnjsonify(result_msg)#创建数据库操作对象db_dis=ClassicsDao()db_usr=UsersDao()#查询文学作品的评论列表discuss=db_dis.getDiscussByCid(cid)

接左边:

#循环取出文学评论,并封装评论的用户#文学评论列表dis_list=[]

fordisindiscuss:#获取用户编号uid=dis.uid#查询用户信息user=db_usr.getUserByUid(uid)#构建返回数据dis_tmp={"did":dis.did,"comment":ment,"cdate":dis.cdate,"topcount":dis.topcount,"lowcount":dis.lowcount,"cid":dis.cid}#转换数据为Json格式数据users_Schema=UsersSchema()users_data=users_Schema.dump(user)dis_tmp["user"]=users_data#将构建好的文学评论列表加入返回列表中dis_list.append(dis_tmp)#将转换后的JSON格式数据存储至返回结果result_msg["data"]=dis_listreturnjsonify(result_msg)......

3.1.2开发书评展示API接口4.API接口测试后端项目启动后,我们可以通过访问“:5000/api/classics/get-discuss/1”来调用API接口。测试结果如图7.8所示。图7.8书评展示API接口测试结果

3.1.3开发书评展示功能1开发业务逻辑在“cls_clt”项目中,我们找到“/src/views/ClassicView.vue”的文学作品页面。在该文件中,我们调用“书评展示API接口”,获取文学作品的评论信息。关键代码如下所示:<scriptlang="ts"setup>......//文学评论数据vardisDatas=ref([])//调用API接口,获取文学评论信息functioninitDis(){axios({method:'get',url:'/svr/api/classics/get-discuss/'+cid.value}).then(function(response){if(response.data.code=='200'){

disDatas.value=response.data.data}}).catch(function(error){console.log(error)})}

接左边://监听路由参数watch(()=>route.params,(newValue,oldValue)=>{......//初始化文学评论信息initDis()},//immediate:true选项来强制侦听器的回调立即执行{immediate:true})......</script>

3.1.3开发书评展示功能2开发页面逻辑在“cls_clt”项目的ClassicView.vue页面文件中,我们将当前文学评论数据,通过v-for命令展示评论列表,将评论信息呈现给用户。以下是实现这一功能的关键代码:......<el-main>......<!--文学评论展示开始--><divstyle="margin:auto"><el-divider>书评信息({{clsDmentscount}}条)</el-divider><el-descriptionsv-for="itemindisDatas":key="item.did"class="margin-top":column="1"><template#title><el-avatar:size="35":src="String('/svr/api/image/display/head/')+item.user.avatar"style="vertical-align:middle"/><el-textclass="mx-1"type="primary"size="large"style="margin-left:5px">{{item.user.nikename}}</el-text></template>

接左边:<template#extra><el-button-groupclass="ml-4"><el-buttontype="danger"><el-icon><Upload/></el-icon>顶({{item.topcount}})</el-button><el-buttontype="danger"><el-icon><Download/></el-icon>踩({{item.lowcount}})</el-button></el-button-group></template><el-descriptions-item><divstyle="margin-left:80px"><el-textclass="mx-1"size="large">{{ment}}</el-text></div></el-descriptions-item></el-descriptions></div><!--文学评论展示结束--></el-main>......

3.1.3开发书评展示功能3测试书评展示功能成功运行前端项目后,我们通过浏览器浏览了文学作品展示页。这个页面会呈现该文学作品的评论列表。运行效果如图7.7所示。图7.7文学评论展示效果

3.2.1开发书评发表功能1.需求描述当用户成功登录后,并浏览文学作品时,页面将展示一个醒目的“发表书评”区域。用户可在此区域中自由输入对文学作品的深刻感悟和独到见解,单击“发表书评”按钮,即可完成整个书评的发布流程。同时,书评列表将实时更新,展现最新的书评内容。运行效果如图7.9所示。图7.9发表书评运行效果

3.2.1开发书评发表功能1.需求描述在开发该功能时,我们需要使用后端项目的API接口,具体API接口信息见表7.7所示。表7.7开发过程中调用的API接口表接口调用方式说明书评发表API接口http://ip地址:端口/api/classics/pub-discuss本节进行开发

3.2开发书评发表功能任务步骤:1.需求描述2.开发书评发表API接口3.开发书评发表功能

3.2.2开发书评发表API接口1.需求描述该API接口将接收前端传递的文学编号和书评内容,并将其插入到数据库中相应的文学评论表中,并更新文学表中的书评数量(commentscount)字段。最后,该接口会将结果反馈给客户端,确保信息的即时性和交互性。本API接口需要经历严格的身份验证流程,以确保数据的绝对安全和访问的合法性。有关该接口的说明,请参阅表7.8。表7.8书评发表API接口说明表功能说明书评发表API接口调用路径http://ip地址:端口/api/classics/pub-discussHTTP请求方式POST请求数据类型application/json请求数据参数参数名类型长度描述必须cidint文学作品编号■commentvarchar书评内容■返回数据类型application/json返回数据参数参数名类型长度描述必须codevarchar状态码,200正确,其他错误■msgvarchar返回消息内容■请求参数JSON(样例){

"cid":1,"comment":"文笔细腻,值得一看!"}返回数据JSON(样例){"code":"200","msg":"操作成功!"}

3.2.2开发书评发表API接口2.开发数据操作模块在“cls_svr”项目中,我们找到“/app/dao/ClassicsDao.py”文件,并在该文件内开发书评发表的数据库操作功能。以下是实现该功能的关键代码:......#数据库操作类classClassicsDao:

......#10.发表文学评论defaddDiscuss(self,discuss):

flag=True#成功标志,True操作成功,False操作失败try:#查询对应的文学作品classic=Classics.query.get(discuss.cid)#设置文学作品的评论数(+1)mentscount=mentscount+1#将评论插入文学评论表

db.session.add(discuss)mit()#提交至数据库exceptExceptionase:flag=Falsedb.session.rollback()#异常,回滚数据库passreturnflag

3.2.2开发书评发表API接口3.开发业务逻辑模块在“cls_svr”项目中,我们找到“/app/api/classics_blueprint.py”的文学蓝图文件。在此文件中,我们将定义一个视图函数,实现API接口,用于处理发表书评的请求。以下是实现该功能的关键代码:fromapp.model.modelsimportDiscuss,DiscussSchema......#发表文学评论接口@classics_blueprint.route('/pub-discuss',methods=["POST"])@jwt_required()#用户身份鉴权defpubDiscuss():#返回信息result_msg={"code":"200","msg":"操作成功!"}#获取Json格式的请求,并解析JSONrequest_body=request.get_json()#判断传入的Json数据是否为空ifrequest.get_json()isNone:result_msg["code"]="404"result_msg["msg"]="参数错误"returnjsonify(result_msg)#获取文学评论数据cid=request_body.get("cid")#文学作品编号comment=request_body.get("comment")#评论内容#获取认证的用户编号(登录时,通过uid生成Token)uid=get_jwt_identity()cdate=datetime.datetime.now()接左边:

#新建评论对象discuss=Discuss(cid=cid,uid=uid,comment=comment,cdate=cdate)#创建数据库操作对象db_op=ClassicsDao()#发表文学评论flag=db_op.addDiscuss(discuss)ifflag:result_msg["code"]="200"result_msg["msg"]="操作成功!"else:result_msg["code"]="404"result_msg["msg"]="操作失败!"#返回操作结果returnjsonify(result_msg)......

3.2.2开发书评发表API接口4.API接口测试后端项目启动后,我们可以通过访问“:5000/api/classics/pub-discuss”来调用该API。在进行测试之前,请确保在请求的headers中设置Authorization参数,其值应当遵循“Bearer+空格+token”的格式,这里的token是我们在登录操作后收到的令牌。测试结果如图7.10所示。图7.10发表书评API接口测试结果

3.2.1开发书评发表功能1.开发业务逻辑在“cls_clt”项目中,我们找到“/src/views/ClassicView.vue”的文学作品展示页面。在这个文件中,我们调用“书评发表API接口”,对文学作品发表评论。以下是实现这一功能的关键代码:<scriptlang="ts"setup>......//书评内容constcomment=ref('')......//发表书评functionpubDiscuss(){letdata={cid:cid.value,comment:comment.value}axios({method:'post',url:'/svr/api/classics/pub-discuss',headers:{'Content-Type':'application/json',Authorization:'Bearer'+token.value},data:data})接左边:.then(function(response){if(response.data.code=='200'){//发表书评成功后,显示书评initDis()//文学作品评论数+1clsDmentscount++//清空评论信息comment.value=''//提示信息ElMessage({message:'发表书评成功!',type:'success',plain:true})}}).catch(function(error){//鉴权判断if(error.response.status==401){//设置当前登录用户的token为空token.value=''userStore.setToken('')//提示信息ElMessage({message:'请重新登录!',type:'success',plain:true})}})}</script>

3.2.1开发书评发表功能2.开发页面逻辑在“cls_clt”项目的ClassicView.vue页面文件中,我们开发书评发表的页面逻辑功能,通过用户token来控制书评发表区域的显示和隐藏功能。以下是实现这一功能的关键代码:<template>......<!--发表书评开始--><divv-if="token!=''"style="margin:auto;text-align:center"><el-divider>发表书评</el-divider><el-inputv-model="comment"style="width:80%":autosize="{minRows:2,maxRows:4}"type="textarea"placeholder="请输入评论信息..."/><br/><el-buttonstyle="margin-top:5px"type="primary"@click="pubDiscuss">发表书评</el-button></div><!--发表书评结束-->......</template>

3.2.3开发书评发表功能3.测试书评发表功能成功运行前端项目后,用户进行登录操作,并访问文学作品页面。在此页面上,用户可以输入书评内容,并通过单击“发表书评”按钮,发表书评内容。运行效果如图7.9所示。图7.9发表书评运行效果

3.3开发书评评价功能任务步骤:1.需求描述2.开发书评评价API接口3.开发书评评价功能

3.3.1开发书评评价功能需求描述在本小节中,我们将推出书评评价功能。此功能可以让用户对书评信息进行评价。在文学作品展示页面,用户可以对书评点赞或表示反对,实现个性化互动与交流。运行效果如图7.11所示。图7.11书评评价展示效果

3.3.1开发书评评价功能需求描述在开发该功能时,我们需要使用后端项目的API接口,具体API接口信息见表7.9所示。表7.9开发过程中调用的API接口表接口调用方式说明书评评价API接口http://ip地址:端口/api/classics/judge-discuss本节进行开发

3.3.2开发书评评价API接口1.需求描述该API接口将接收前端传递的书评编号(did)和评价标志,随后根据这些信息对文学评论表(discuss)中对应的书评进行评价操作,具体操作为更新该书评的顶/踩字段(topcount/lowcount)的值。同时,该接口还会在评论评价表(discusjudges)中新增一条评价记录,以记录用户的评价信息。该接口的说明请参阅表7.10。表7.10书评评价API接口说明表功能说明书评评价API接口调用路径http://ip地址:端口/api/classics/judge-discussHTTP请求方式POST请求数据类型application/json请求数据参数参数名类型长度描述必须didint书评编号■toplowint评价标志(0-踩,1-顶)■返回数据类型application/json返回数据参数参数名类型长度描述必须codevarchar状态码,200正确,其他错误■msgvarchar返回消息内容■请求参数JSON(样例){

"did":1,"toplow":0}返回数据JSON(样例){"code":"200","msg":"操作成功!"}

3.3.2开发书评评价API接口2.开发数据操作模块在“cls_svr”项目中,我们找到“/app/dao/ClassicsDao.py”文件,开发评价书评的数据库操作功能。以下是实现该功能的关键代码:......#数据库操作类classClassicsDao:

......#11.评价书评defupdateDiscussTopLow(self,judge):

flag=True#成功标志,True操作成功,False操作失败try:#查询书评信息dis=Discuss.query.get(judge.did)#设置书评的“顶”和“踩”的数量ifjudge.toplow==1:dis.topcount=dis.topcount+1else:dis.lowcount=dis.lowcount+1#将评价信息插入书评评价表

db.session.add(judge)mit()#提交至数据库exceptExceptionase:flag=Falsedb.session.rollback()#异常,回滚数据库passreturnflag

3.3.2开发书评评价API接口3.开发业务逻辑模块在“cls_svr”项目中,请找到“/app/api/classics_blueprint.py”的文学蓝图文件。在该文件中,我们将编写视图函数,实现API接口,用以处理书评评价功能的逻辑。以下是实现这一功能的关键代码:......fromapp.model.modelsimportDiscusjudges#评价书评接口@classics_blueprint.route('/judge-discuss',methods=["POST"])@jwt_required()#用户身份鉴权defjudgeDiscuss():#返回信息result_msg={"code":"200","msg":"操作成功!"}#获取Json格式的请求,并解析JSONrequest_body=request.get_json()#判断传入的Json数据是否为空ifrequest.get_json()isNone:result_msg["code"]="404"result_msg["msg"]="参数错误"returnjsonify(result_msg)#获取评价数据did=request_body.get("did")#书评编号toplow=request_body.get("toplow")#顶/踩的标志#获取认证的用户编号(登录时,通过uid生成Token)

uid=get_jwt_identity()

jdate=datetime.datetime.now()接左边:#新建评价对象judge=Discusjudges(did=did,uid=uid,toplow=toplow,jdate=jdate)#创建数据库操作对象db_op=ClassicsDao()#评价书评flag=db_op.updateDiscussTopLow(judge)ifflag:result_msg["code"]="200"result_msg["msg"]="操作成功!"else:result_msg["code"]="404"result_msg["msg"]="操作失败!"#返回操作结果returnjsonify(result_msg)......

3.3.2开发书评评价API接口4.API接口测试后端项目启动后,我们可以通过访问URL“:5000/api/classics/judge-discuss”来调用该API。在进行测试之前,请确保在请求的headers中设置Authorization参数,其值应当遵循“Bearer+空格+token”的格式,这里的token是我们在登录操作后收到的令牌。测试结果如图7.12所示。图7.12书评评价API接口测试结果

3.3.3开发书评评价功能1.开发业务逻辑模块在“cls_clt”项目中,我们找到“/src/views/ClassicView.vue”的文学展示页面。在这个文件中,我们调用“书评评价API接口”,对书评进行评价。以下是实现这一功能的关键代码:<scriptlang="ts"setup>......//顶、踩书评(0-踩,1-顶)functionjudgeDiscus(did,judge){letdata={did:did,toplow:judge}axios({method:'p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论