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)
原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13936780.html