Exemple #1
0
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)
Exemple #3
0
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="发布成功")
Exemple #4
0
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="发布新闻成功")
Exemple #6
0
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})
Exemple #7
0
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="新闻发布成功")
Exemple #8
0
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="编辑新闻成功")