这些是我的代码,但我不知道为什么错误仍然出现,我试图从光标转换为json,但什么也没有发生。
在下面的代码中,我需要从表单获取输入,并从mongodb服务器返回数据,这样我就可以获取这些数据并对其应用一些筛选。
filter.py
# import json
from ast import dump
from flask import Flask, jsonify, request, session, redirect
from app import db
import pymongo
from bson.json_util import dumps
import json
from bson import json_util
class Filter():
def __init__(self):
pass
def filter_tweets(self):
conditions = {
"filterby":request.form.getlist('checkbox'),
"forlikes":request.form.get('likeElements'),
"forreplies":request.form.get('replyElements'),
"forretweets":request.form.get('retweetElements'),
"likenumber":request.form.get('forlike'),
"likenumber":request.form.get('forreply'),
"likenumber":request.form.get('forretweets'),
}
session['conditions'] = conditions
session['data'] = db.tweets.find().sort(str(session['conditions']['filterby']),pymongo.ASCENDING)
json_docs = []
for doc in session['data']:
json_docs.append(doc)
return json_docs
她可以看到我的路由在('/myTweets')路由中应用该方法过滤数据之后,它将返回过滤后的数据
routes.py
@app.route('/tweets/filter')
def filter():
return render_template('filtering.html')
@app.route('/myTweets',methods=['POST'])
def filter_tweet():
test = Filter().filter_tweets()
return test
@app.route('/test')
def test():
test = Filter().filter_tweets()
return render_template('test.html')
这是我的js代码,带我去下一条路线。
scripts.js
$("form[name=filter-form").submit(function (e) {
var $form = $(this);
var $error = $form.find(".error");
var data = $form.serialize();
$.ajax({
url: "/myTweets",
type: "POST",
data: data,
dataType: "json",
success: function (resp) {
window.location.href = "/test";
},
error: function (resp) {
$error.text(resp.responseJSON.error).removeClass("error--hidden");
}
})
e.preventDefault();
})
错误停用:
127.0.0.1 - - [25/Aug/2022 14:22:18] "POST /myTweets HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2548, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2528, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2525, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
return self.finalize_request(rv)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 1844, in finalize_request
response = self.process_response(response)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2340, in process_response
self.session_interface.save_session(self, ctx.session, response)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\sessions.py", line 409, in save_session
val = self.get_signing_serializer(app).dumps(dict(session)) # type: ignore
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\itsdangerous\serializer.py", line 207, in dumps
payload = want_bytes(self.dump_payload(obj))
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\itsdangerous\url_safe.py", line 53, in dump_payload
json = super().dump_payload(obj)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\itsdangerous\serializer.py", line 169, in dump_payload
return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\tag.py", line 308, in dumps
return dumps(self.tag(value), separators=(",", ":"))
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\__init__.py", line 124, in dumps
return app.json.dumps(obj, **kwargs)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\provider.py", line 230, in dumps
return json.dumps(obj, **kwargs)
File "C:\Users\hadim\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 238, in dumps
**kw).encode(obj)
File "C:\Users\hadim\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\hadim\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\provider.py", line 122, in _default
raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable")
TypeError: Object of type Cursor is not JSON serializable
pl
发布于 2022-08-25 18:47:11
.find()
返回一个游标。如果要将数据输出到json,请首先将其转换为列表:
session['data'] = list(db.tweets.find().sort(str(session['conditions']['filterby']),pymongo.ASCENDING))
https://stackoverflow.com/questions/73487039
复制相似问题