• 1.5发布新闻


    发布新闻的效果如下,最终效果能发布完即使在首页中显示

     

    下面是接口设计

     我们这里用的是富文本编辑器

    1、前端的代码

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>用户中心</title>
     6     <link rel="stylesheet" type="text/css" href="../../static/news/css/reset.css">
     7     <link rel="stylesheet" type="text/css" href="../../static/news/css/main.css">
     8     <script type="text/javascript" src="../../static/news/js/jquery-1.12.4.min.js"></script>
     9     <script type="text/javascript" src="../../static/news/js/jquery.form.min.js"></script>
    10     <script src="../../static/news/tinymce/js/tinymce/tinymce.min.js"></script>
    11     <script src="../../static/news/js/tinymce_setup.js"></script>
    12     <script type="text/javascript" src="../../static/news/js/user_news_release.js"></script>
    13 </head>
    14 <body class="inframe_body">
    15     <form class="release_form">
    16         <h3>新闻发布</h3>
    17         <div class="form-group"><label>新闻标题:</label><input type="text" class="input_txt2" name="title"></div>
    18         <div class="form-group">
    19             <label>新闻分类:</label>
    20             <select class="sel_opt" name="category_id">
    21                 {% for category in context.categories %}
    22                     <option value="{{ category.id }}">{{ category.name }}</option>
    23                 {% endfor %}
    24             </select>
    25         </div>
    26         <div class="form-group"><label>摘要:</label><textarea class="input_multxt" name="digest"></textarea></div>
    27         <div class="form-group"><label>上传图片:</label><input type="file" name="index_image" class="input_file"></div>
    28         <div class="form-group">
    29             <label>内容:</label>
    30             <div class="fl"><input class="input_area" id="rich_content" name="content" value=" "/></div>
    31         </div>
    32         <div class="form-group">
    33             <input type="submit" value="发 布" class="input_sub input_sub2">
    34         </div>
    35         <div class="error_tip2">错误提示</div>
    36     </form>
    37     <script>
    38         $(function(){
    39             window.parent.fnSetIframeHeight(900);
    40         })
    41     </script>
    42 </body>
    43 </html>

    2、下面是js得代码

     1 function getCookie(name) {
     2     var r = document.cookie.match("\b" + name + "=([^;]*)\b");
     3     return r ? r[1] : undefined;
     4 }
     5 
     6 
     7 $(function () {
     8 
     9     $(".release_form").submit(function (e) {
    10         e.preventDefault();
    11 
    12         /*
    13         $.ajax({}); get post
    14         一般用于传输纯文本的字符串
    15         表单中的带有name的input标签的值,都需要程序员自己写代码读取
    16 
    17         $(this).ajaxSubmit({});
    18         一般用于传输不是纯文本的数据的:比如一个表单中input type=text   / type=file
    19         注意:会自动的以表单的行为取读取表单中带有name的input标签的值,从而程序员不需要手动的读取
    20         不用传递data
    21         */
    22 
    23         // TODO 发布完毕之后需要选中我的发布新闻
    24         $(this).ajaxSubmit({
    25 
    26             // 读取富文本编辑器里面的文本信息
    27             beforeSubmit: function (request) {
    28                 // 在提交之前,对参数进行处理
    29                 for(var i=0; i<request.length; i++) {
    30                     var item = request[i];
    31                     if (item["name"] == "content") {
    32                         item["value"] = tinyMCE.activeEditor.getContent()
    33                     }
    34                 }
    35             },
    36             url: "/user/news_release",
    37             type: "POST",
    38             headers: {
    39                 "X-CSRFToken": getCookie('csrf_token')
    40             },
    41             success: function (resp) {
    42                 if (resp.errno == "0") {
    43                     // 选中索引为6的左边单菜单
    44                     window.parent.fnChangeMenu(6)
    45                     // 滚动到顶部
    46                     window.parent.scrollTo(0, 0)
    47                 }else {
    48                     alert(resp.errmsg)
    49                 }
    50             }
    51         });
    52     });
    53 });

    3、后端得代码

     1 @user_blue.route("/news_release",methods = ["POST","GET"])
     2 @user_login_data
     3 def news_release():
     4     user = g.user
     5     # 接收用户信息同时判断是否登录
     6     if not user:
     7         return redirect(url_for('index.index'))
     8     try:
     9         #获取分类中的所有信息
    10         categories = Category.query.all()
    11     except Exception as e:
    12         current_app.logger.error(e)
    13         return jsonify(errno=RET.DATAERR, errmsg="查询失败")
    14     #当提交方式为POST的时候
    15     if request.method == "POST":
    16         #获取前端接口中的数据
    17         title = request.form.get("title")
    18         category_id = request.form.get("category_id")
    19         digest = request.form.get("digest")
    20         index_image = request.files.get("index_image")
    21         content = request.form.get("content")
    22         try:
    23             #用read()函数读取判断文件中是否有内容
    24             avatar_data = index_image.read()
    25         except Exception as e:
    26             #日志记录
    27             current_app.logger.error(e)
    28             return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
    29         try:
    30             # 用key变量接收上传完七牛云返回的指纹
    31             key = upload_file(avatar_data)
    32         except Exception as e:
    33             current_app.logger.error(e)
    34             return jsonify(errno=RET.THIRDERR, errmsg="七牛云存储错误")
    35         #判断接收来的参数是否齐全
    36         if not all([title,category_id,digest,index_image,content]):
    37             return jsonify(errno=RET.PARAMERR, errmsg="参数不齐全")
    38         try:
    39             #实例化模型类
    40             news_updata = News()
    41         except Exception as e:
    42             current_app.logger.error(e)
    43             return jsonify(errno=RET.PARAMERR, errmsg="参数不齐全")
    44 
    45         #逻辑添加到数据库
    46         news_updata.title = title
    47         news_updata.category_id = category_id
    48         news_updata.digest = digest
    49         news_updata.index_image_url = constants.QINIU_DOMIN_PREFIX + key
    50         news_updata.content = content
    51         news_updata.source = user.nick_name
    52         news_updata.user_id = user.id
    53         try:
    54             #上传数据至数据库
    55             db.session.add(news_updata)
    56             db.session.commit()
    57         except Exception as e:
    58             current_app.logger.error(e)
    59             #出错回滚
    60             db.session.rollback()
    61             return jsonify(errno=RET.PARAMERR, errmsg="数据库上传失败")
    62         return jsonify(errno=RET.OK, errmsg="发布成功")
    63     #传递上下文
    64     context = {
    65         "categories":categories,
    66     }
    67     return render_template("news/user_news_release.html",context =context)
  • 相关阅读:
    130被围绕的区域
    695岛屿的最大面积
    200岛屿数量
    5314跳跃游戏IV
    375猜数字大小II
    464我能赢吗
    486预测赢家
    877石子游戏
    1000合并石头的最低成本
    5329数组大小减半
  • 原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13936780.html
Copyright © 2020-2023  润新知