def user_pic_info(): user = g.user if request.method == "GET": data = {"user_info": user.to_dict() if user else None} return render_template("profile/user_pic_info.html", data=data) else: # 1,获取参数 file_data = request.files.get("avatar").read() # 2,校验参数 if not all([user, file_data]): current_app.logger.error("参数不足") return jsonify(errno=RET.PARAMERR, errmsg="参数不足") try: pic_name = pic_storage(file_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="七牛云错误") # 3,逻辑处理 user.avatar_url = pic_name try: db.session.commit() except Exception as e: db.session.rollback() current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询错误") data = { "user_info": user.to_dict(), "avatar_url": constants.QINIU_DOMIN_PREFIX + pic_name } # 4,返回值 return jsonify(errno=RET.OK, errmsg="上传头像成功", data=data)
def pic_info(): """修改用户头像后端接口""" # 获取当前用户对象 user = g.user # GET请求:返回修改用户头像页面 if request.method == 'GET': return render_template("profile/user_pic_info.html") # POST请求:修改用户头像接口 """ 1.获取参数 1.1 avatar: 用户头像数据,user:用户对象 2.校验参数 2.1 非空判断 3.逻辑处理 3.0 借助封装好的工具,将二进制图片数据上传到七牛云 3.1 图片的url保存到用户对象中 3.2 将完整的图片url返回给前端 4.返回值 """ #1.1 avatar: 用户头像数据 try: pic_data = request.files.get("avatar").read() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="图片数据不存在") if not user: return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录") # 3.0 借助封装好的工具,将二进制图片数据上传到七牛云 try: pic_name = pic_storage(pic_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="七牛云上传图片失败") """ 1. avatar_url = 域名 + 图片名称 2. avatar_url = 图片名称 (采用该方法更换域名更加方便) """ # 3.1 图片的url保存到用户对象中 user.avatar_url = pic_name try: db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DBERR, errmsg="保存用户头像失败") # 3.2 将完整的图片url返回给前端 full_url = constants.QINIU_DOMIN_PREFIX + pic_name # 组织数据 data = {"avatar_url": full_url} return jsonify(errno=RET.OK, errmsg="修改用户头像成功", data=data)
def user_news_release(): user = g.user if request.method == "GET": try: categories = Category.query.all() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询错误") category_dict_list = [] for category in categories if categories else []: category_dict_list.append(category.to_dict()) category_dict_list.pop(0) data = { # "user_info": user.to_dict() if user else None, "categories": category_dict_list } return render_template("profile/user_news_release.html", data=data) else: param = request.form index_image = request.files.get("index_image") title = param.get("title") cid = param.get("category_id") digest = param.get("digest") content = param.get("content") source = "个人发布" if not all([user, title, cid, digest, content, index_image]): current_app.logger.error("参数错误") return jsonify(errno=RET.PARAMERR, errmsg="参数错误") index_data = index_image.read() try: index_name = pic_storage(index_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询错误") news = News() news.user_id = user.id news.title = title news.source = source news.content = content news.digest = digest news.category_id = cid news.status = 1 news.index_image_url = constants.QINIU_DOMIN_PREFIX + index_name try: db.session.add(news) db.session.commit() except Exception as e: db.session.rollback() current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询错误") return jsonify(errno=RET.OK, errmsg="发布成功")
def pic_info(): """更换用户头像后端接口""" # 获取用户对象 user = g.user # GET:返回修改用户头像页面 if request.method == 'GET': data = {"user_info": user.to_dict() if user else None} return render_template('profile/user_pic_info.html', data=data) # POST:修改用户头像 """ 1.获取参数 1.1 avatar: 用户头像数据, user:用户对象 2.校验参数 2.1 非空判断 3.逻辑处理 3.1 借助封装好的工具,将二进制图片数据上传到七牛云 3.2 图片的url保存到用户对象中 3.3 将完整的图片url返回给前端 4.返回值 """ # 1.获取到上传的文件 avatar: 用户头像数据, user:用户对象 try: avatar_file = request.files.get("avatar").read() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="读取文件错误 ") # 2.借助封装好的工具,将二进制图片数据上传到七牛云 try: url = pic_storage(avatar_file) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="上传图片错误") # 3.将头像信息更新到当前用户的模型中 # 图片的url保存到用户对象中 user.avatar_url = url # 将数据保存到数据库 try: db.session.commit() except Exception as e: current_app.logger.error(e) # 数据库回滚 db.session.rollback() return jsonify(errno=RET.DBERR, errmsg="保存用户数据异常") # 组织响应数据字典 data = {"avatar_url": constants.QINIU_DOMIN_PREFIX + url} # 返回值 将完整的图片url返回给前端 return jsonify(errno=RET.OK, errmsg="OK", data=data)
def news_release(): """新闻发布的后端接口""" # 获取用户对象 user = g.user # GET请求:展示新闻发布页面 if request.method == 'GET': # 查询分类数据 try: categories = Category.query.all() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询分类数据异常") # 对象列表转字典列表 category_dict_list = [] for category in categories if categories else []: category_dict_list.append(category.to_dict()) # 注意: 移除最新分类 category_dict_list.pop(0) # 组织响应数据 data = {"categories": category_dict_list} return render_template("profile/user_news_release.html", data=data) # POST请求:发布新闻 """ 1.获取参数 1.1 title:新闻标题, category_id:新闻分类id,digest:新闻摘要,index_image:新闻主图片 content: 新闻内容,user:当前用户,source:新闻来源(默认值:个人发布) 2.校验参数 2.1 非空判断 3.逻辑处理 3.0 将新闻主图片上传到七牛云 3.1 创建新闻对象,并将其属性赋值 3.2 保存回数据库 4.返回值 """ # 1.1获取参数 title = request.form.get("title") category_id = request.form.get("category_id") digest = request.form.get("digest") content = request.form.get("content") index_image = request.files.get("index_image") source = "个人发布" # 2.1 非空判断 if not all([title, category_id, digest, content, index_image]): return jsonify(errno=RET.PARAMERR, errmsg="参数不足") #2.2 用户是否登录判断 if not user: return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录") try: pic_data = index_image.read() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="图片数据不能为空") # 3.0 将新闻主图片上传到七牛云 try: pic_name = pic_storage(pic_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="上传图片到七牛云失败") # 3.1 创建新闻对象,并将其属性赋值(8个属性) news = News() news.title = title news.category_id = category_id news.digest = digest news.content = content news.index_image_url = constants.QINIU_DOMIN_PREFIX + pic_name news.source = source news.user_id = user.id # 设置新闻发布后的状态为:审核中 news.status = 1 # 3.2 保存回数据库 try: db.session.add(news) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DBERR, errmsg="保存新闻对象异常") #4.返回值 return jsonify(errno=RET.OK, errmsg="发布新闻成功")
def pic_info(): """展示用户头像后端接口""" """ GET请求方式:返回修改用户头像页面 POST请求方式: 1.获取参数 1.1 user:当前登陆的用户对象,avatar:上传的图片数据 2.参数检验 2.1 非空判断 3.逻辑处理 3.1 调用工具类将图片数据上传到骑牛云 3.2 将返回的图片名称给予avatar_url赋值,并保存回数据库 3.3 将图片的完整url返回 4.返回值 """ # GET请求方式:返回修改用户头像页面 if request.method == "GET": return render_template("profile/user_pic_info.html") # POST请求:提交头像数据并修改保存 """ 1.获取参数 1.1 avatar:上传的图片数据,user:当前用户对象 2.参数检验 2.1 非空判断 3.逻辑处理 3.1 调用工具类将图片数据上传到七牛云 3.2 将返回的图片名称给予avatar_urlfuzhi ,并保存到数据库 3.3 将图片的完整url返回 4.返回值 """ # 1.1 avatar:上传的图片数据,user:当前用户对象 avatar = request.files.get("avatar") avatar_data = None try: # 获取图片的二进制格式数据 avatar_data = avatar.read() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="图片数据读取失败") # 获取当前登录用户 user = g.user # 2.1 非空判断 if not avatar_data: return jsonify(errno=RET.NODATA, errmsg="图片数据为空") if not user: return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录") # 3.1 调用工具类将图片数据上传到七牛云 try: pic_name = pic_storage(avatar_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="上传图片到七牛云异常") # 3.2 将返回的图片名称给予avatar_urlfuzhi ,并保存到数据库 user.avatar_url = pic_name try: db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DBERR, errmsg="保存用户图像异常") # 3.3 将图片的完整url返回 # 格式:域名前缀 + 图片名称 full_url = constants.QINIU_DOMIN_PREFIX + pic_name # 4. 返回上传图片成功 return jsonify(errno=RET.OK, errmsg="返回上传图片成功", data={"avatar_url": full_url})
def news_release(): """发布新闻的页面显示&发布新闻的逻辑处理""" # GET请求:发布新闻的页面展示,同时将分类数据返回 if request.method == "GET": # 1.查询所有分类的数据 try: categories = Category.query.all() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询分类对象异常") # 2. 分类列表对象转换成字典对象 category_dict_list = [] for category in categories if categories else []: category_dict_list.append(category.to_dict()) # 移除'最新'分类 category_dict_list.pop(0) return render_template("profile/user_news_release.html", data={"categories": category_dict_list}) # POST请求:发布新闻逻辑处理 """ 1.获取参数(表单请求数据) 1.1 title:新闻标题,cid:新闻分类,digest:新闻的摘要,index_image:新闻主图片, content:新闻的内容,user:当前用户对象 2.参数检验 2.1 非空判断 3.逻辑处理 3.1 新闻主图片保存到七牛云 3.2 创建新闻对象,给各个属性赋值,保存会收据库 4.返回值 """ # 1.1 title:新闻标题,cid:新闻分类,digest:新闻的摘要,index_image:新闻主图片, # content:新闻的内容,user:当前用户对象 param_dict = request.form title = param_dict.get("title") cid = param_dict.get("category_id") digest = param_dict.get("digest") content = param_dict.get("content") index_image = request.files.get("index_image") user = g.user source = "个人发布" # 2.1 非空判断 if not all([title, cid, content, index_image]): return jsonify(errno=RET.PARAMERR, errmsg="参数不足") if not user: return jsonify(errno=RET.SESSIONERR, errmsg="用户未登陆") try: cid = int(cid) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="分类id格式错误") # 3.1 新闻主图片保存到七牛云 pic_data = None try: pic_data = index_image.read() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="读取图片数据异常") try: pic_name = pic_storage(pic_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="上传图片到七牛云异常") # 3.2 创建新闻对象,给各个属性赋值,保存会收据库 news = News() # 新闻标题 news.title = title # 新闻分类 news.category_id = cid # 新闻摘要 news.digest = digest # 新闻内容 news.content = content # 新闻主图片的url news.index_image_url = constants.QINIU_DOMIN_PREFIX + pic_name # 新闻来源 news.source = source # 新闻id news.user_id = user.id # 新发布的新闻处于审核中 news.status = 1 # 保存数据回数据库 try: db.session.add(news) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DBERR, errmsg="保存新闻对象异常") return jsonify(errno=RET.OK, errmsg="新闻发布成功")
def news_edit_detail(): """展示新闻编辑详情页面&新闻编辑的逻辑处理""" # GET请求:展示新闻编辑详情页面 if request.method == "GET": # 1.根据新闻id查询对象新闻对象 news_id = request.args.get("news_id") if news_id: try: news = News.query.get(news_id) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询用户对象异常") news_dict = news.to_dict() if news else None # 2.查询所有分类数据,选中新闻对应的分类 try: categories = Category.query.all() except Exception as e: current_app.logger.error(e) # 分类对象列表转换成字典列表 category_dict_list = [] for category in categories if categories else []: # 分类对象转换成字典 category_dict = category.to_dict() # 默认不选择任何分类 category_dict["is_selected"] = False # 分类id和新闻对应的分类id相等表示需要选中 if category.id == news.category_id: category_dict["is_selected"] = True category_dict_list.append(category_dict) # 移除最新分类 category_dict_list.pop(0) # 组织返回数据 data = { "news": news_dict, "categories": category_dict_list } # 返回数据 return render_template("admin/news_edit_detail.html", data=data) # POST请求:新闻审核的业务逻辑 """ 1.获取参数 1.1 news_id:新闻id, title:新闻标题, category_id:分类id, digest:新闻摘要,index_image:新闻主图片(非必传),content:新闻的内容 2.校验参数 2.1 非空判断 3.逻辑处理 3.0 根据新闻id查询对应新闻对象 3.1 如果新闻主图片存在,调用工具类将图片上传到七牛云 3.2 新闻对象各个属性重新赋值,保存回数据库 4.返回值 """ # 1.1 news_id:新闻id, title:新闻标题, category_id:分类id, # digest:新闻摘要,index_image:新闻主图片(非必传),content:新闻的内容 # 前端通过ajaxsubmit方法提交数据,使用form表单接受 param_dict = request.form news_id = param_dict.get("news_id") title = param_dict.get("title") category_id = param_dict.get("category_id") digest = param_dict.get("digest") content = param_dict.get("content") index_image = request.files.get("index_image") # 2.1 非空判断 if not all([news_id, title, category_id, digest, content]): return jsonify(errno=RET.PARAMERR, errmsg="参数不足") # 3.0 根据新闻id查询对应新闻对象 image_data = None try: image_data = index_image.read() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.NODATA, errmsg="没有图片数据") image_name = None if image_data: try: image_name = pic_storage(image_data) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg="上传图片到七牛云异常") # 3.1 如果新闻主图片存在,调用工具类将图片上传到七牛云 try: news = News.query.get(news_id) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="查询新闻对象异常") # 3.2 新闻对象各个属性重新赋值,保存回数据库 news.title = title news.category_id = category_id news.digest = digest news.content = content if image_name: news.index_image_url = constants.QINIU_DOMIN_PREFIX + image_name # 保存到数据库 try: db.session.commit() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="保存新闻对象异常") return jsonify(errno=RET.OK, errmsg="编辑新闻成功")