Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Google App Engine NDB数据存储中使用json保存实体_Json_Google App Engine_Knockout.js_Flask Wtforms - Fatal编程技术网

在Google App Engine NDB数据存储中使用json保存实体

在Google App Engine NDB数据存储中使用json保存实体,json,google-app-engine,knockout.js,flask-wtforms,Json,Google App Engine,Knockout.js,Flask Wtforms,各位开发者好,我正在使用Python Flask、Knockout.js和Google应用程序引擎。现在我正在制作一个基本的程序,就是海报,我只是在用海报发布一些东西。但是Google App Engine数据存储似乎没有从request.json['…'] 当表单.validate\u on\u submit()也处于视图的if条件时 这是我的烧瓶视图代码 @app.route('/post/new',methods=['POST','GET']) def post_it(): form

各位开发者好,我正在使用Python Flask、Knockout.js和Google应用程序引擎。现在我正在制作一个基本的程序,就是海报,我只是在用海报发布一些东西。但是Google App Engine数据存储似乎没有从
request.json['…']
当表单.validate\u on\u submit()也处于视图的if条件时

这是我的烧瓶视图代码

@app.route('/post/new',methods=['POST','GET'])
def post_it():
  form = CreatePost(request.form)
  use_db = ndb.Key(model.User, current_user.name)
  if **form.validate_on_submit()** and request.method=='POST':
    posting = model.Post(
        name = use_db,
        poster = request.json['post'],
        postbody = request.json['postbody'],
        posturl = request.json['posturl'],

      )
    try:
      posting.put()
      flash("Poster has been populated", category='info')
      return jsonify({ "post": request.json['post'],"postbody": request.json['postbody'], "posturl": request.json['posturl'] })
    except CapabilityDisabledError:
      flash('Error Occured while posting')
      return redirect(url_for('post_it'))
  return render_template('poster.html', form=form, use_db = use_db, post_db = post_db)

@app.route('/posts',methods=['GET'])
def all_posts():
  post_db = model.Post.query()
  return jsonify(post_db=post_db)
My poster.html代码

    <form id="new_postform" action="{{ url_for('post_it') }}" data-bind="submit: addPost" class="navbar-form form-inline" method="post" >
    {{ form.csrf_token }}
        <fieldset>
          {{ form.hidden_tag() }}

             <div class="control-group">
                <p>Post</p>
                  <div class="controls">

                        <p>
                        {{ form.poster(id='post',class='form-control required ',placeholder="My Post", autocomplete=True , size=3,**{'data-bind': 'value: post'})}}</p>
                        {% if form.poster.errors %}
                        <ul class="errors">
                            {% for error in form.poster.errors %}
                            <li>{{ error }}</li>
                            {% endfor %}
                        </ul>
                        {% endif %}
                    </div>


            </div>
            <div class="control-group">
                <p>postbody<p>
                  <div class="controls">


                        <p>{{ form.postbody(id='postbody',class='form-control required ',placeholder="Post Description", autocomplete=True , size=3, **{'data-bind': 'value: postbody'} )}}</p>

                    </div>


            </div>
            <div class="control-group">
                <p>post url</p>
                  <div class="controls">

                        <p>
                        {{ form.posturl(id='posturl',class='form-control required ',placeholder="My Post", autocomplete=True , size=3, **{'data-bind': 'value: posturl'} )}}</p>
                        {% if form.posturl.errors %}
                        <ul class="errors">
                            {% for error in form.posturl.errors %}
                            <li>{{ error }}</li>
                            {% endfor %}
                        </ul>
                        {% endif %}
                    </div>


            </div>

            <div class="control-group">
                    <div class="controls">
                        <br><input type="submit" id="postit"  name="postit" value"poster" class="btn btn-primary" /><br><br>

                    </div>
            </div>
          </fieldset>
    </form>
    <ul data-bind="foreach: posts, visible: posts().length > 0">
        <p data-bind="text: post"></p>
        <p data-bind="text: postbody"></p>
        <p data-bind="text: posturl"></p>
    </ul>
    <div class="controls">

    </div>




{% block tail_script %}
<script src="{{ url_for('static', filename='bootstrap/js/jquery.validate.js') }}"></script>
<script src="{{ url_for('static', filename='bootstrap/js/additional-methods.js') }}"></script>
<script type="text/javascript">
 $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
 // This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI

function Post(data) {
    this.post = ko.observable(data.post);
    this.postbody = ko.observable(data.postbody);
    this.posturl = ko.observable(data.posturl);

}

function PostViewModel() {
    var self = this;
    self.posts = ko.observableArray([]);
    self.post = ko.observable();
    self.postbody = ko.observable();
    self.posturl = ko.observable();


    console.log(self.post)

    self.addPost = function() {
        self.save();
        self.post("");
        self.postbody("");
        self.posturl("");

    };

    $.getJSON('/posts', function(postModels) {
        var t = $.map(postModels.posts, function(item) {
            return new Post(item);
        });
        self.posts(t);
    });

    self.save = function() {
        return $.ajax({
            url: '/post/new',
            contentType: 'application/json',
            type: 'POST',
            data: JSON.stringify({
                'post': self.post(),
                'postbody': self.postbody(),
                'posturl': self.posturl(),

            }),
            success: function(data) {
                console.log("Pushing to post array");
                self.posts.push(new Post({ post: data.post, postbody: data.postbody, posturl: data.posturl }));
                return;
            },
            error: function() {
                return console.log("Failed");
            }
        });
    };
}

// Activates knockout.js
ko.applyBindings(new PostViewModel());


</script>

{% endblock %}


{% endblock %}

{{form.csrf_token}
{{form.hidden_tag()}}
职位

{{form.poster(id='post',class='form-control required',placeholder=“My post”,autocomplete=True,size=3,***{'data-bind':'value:post'}}}

{%if form.poster.errors%}
    {form.poster.errors%中的错误为%s}
  • {{error}}
  • {%endfor%}
{%endif%} 后体 {form.postbody(id='postbody',class='form-control required',placeholder=“Post Description”,autocomplete=True,size=3,***{'data-bind':'value:postbody'}}}

发布url

{form.postrl(id='postrl',class='form-control required',placeholder=“My Post”,autocomplete=True,size=3,***{'data-bind':'value:postrl'}}}

{%if form.postrl.errors%}
    {form.postrl.errors%中的错误为%s}
  • {{error}}
  • {%endfor%}
{%endif%}


{%block tail_script%} $SCRIPT_ROOT={{request.SCRIPT_ROOT|tojson|safe}; //这是一个简单的*viewmodel*-JavaScript,用于定义用户界面的数据和行为 职能职位(数据){ this.post=ko.可观察(data.post); this.postbody=ko.observable(data.postbody); this.postrl=ko.可观察(data.postrl); } 函数PostViewModel(){ var self=这个; self.posts=ko.observearray([]); self.post=ko.observable(); self.postbody=ko.observable(); self.posturl=ko.observable(); console.log(self.post) self.addPost=函数(){ self.save(); self.post(“”); self.postbody(“”); 自我姿态(“”); }; $.getJSON('/posts',函数(postModels){ var t=$.map(postModels.posts,函数(项){ 返回新岗位(项目); }); 自我标杆(t); }); self.save=函数(){ 返回$.ajax({ url:“/post/new”, contentType:'应用程序/json', 键入:“POST”, 数据:JSON.stringify({ “post”:self.post(), “postbody”:self.postbody(), 'postrl':self.postrl(), }), 成功:功能(数据){ log(“推到post数组”); self.posts.push(新的Post({Post:data.Post,postbody:data.postbody,postrl:data.postrl})); 返回; }, 错误:函数(){ 返回console.log(“失败”); } }); }; } //激活knockout.js 应用绑定(新的PostViewModel()); {%endblock%} {%endblock%}

是否有任何方法可以使用request.json['..'''']运行form.validate_on_submit(),我不知道哪里出了问题。

您可能需要清理一下代码,只保留最重要的内容。。开始删除代码行以隔离您的问题,在此过程中,您可能也会找到答案。在所有这些行之间很难读懂…Lipis我已经用特定的细节编辑了poster.html代码