小编Seb*_*ian的帖子

Flask request.json来dict

我正在努力使用JQuery ajax方法和Flask,尝试进行ajax调用以检索某些表单.

我的js代码看起来像这样:

$.ajax({
       type: 'POST',
       url: '/projects/dummyName',
       data: JSON.stringify("{'ajax': 'True'}"),
       contentType: 'application/json;charset=UTF-8',
       dataType: 'html',
       success: function(responseData, textStatus, jqXHR) {
           $("#myform").text(responseData);
         },
       error: function (responseData, textStatus, errorThrown) {
           alert('Error: '+errorThrown + ". Status: "+textStatus);
       }
}); 
Run Code Online (Sandbox Code Playgroud)

基本上我添加数据参数让服务器方法这是一个ajax调用.但我不能把服务器中的数据作为一个字典.尝试过方式,无法使其发挥作用.

这是虚拟服务器方法:

@app.route('/projects/<name>', methods=['GET', 'POST'])
def projects(name=None):
    print(request.json)
    print(request.json['ajax'])
    if name:
        project = db.getProject(name)
        form = ProjectForm(project)

        if request.json['ajax'] == True:
            return render_template("myform.html", form=form)
        else:
            return render_template("projectView.html", form=form)
    else:
        return render_template("projects.html")
Run Code Online (Sandbox Code Playgroud)

所以,request.json返回一个字符串:

{'ajax':'真'}

当然,当试图访问json ['ajax']时app会中断,我得到一个BAD RESPONSE错误信息.我认为这会给我一个python dict,因为否则request.json和request.data之间的区别是两个都是字符串.

如何在ajax调用中传递所有数据的python dict?它取决于我定义contentType的方式吗?它是否依赖于JSON.stringify的使用?

将非常感谢帮助!谢谢

python jquery json dictionary flask

10
推荐指数
1
解决办法
3万
查看次数

如何在 gRPC python 中定义全局错误处理程序

我试图捕获在任何服务程序中引发的任何异常,以便我可以确保我只传播已知的异常而不是像 ValueError、TypeError 等意外的异常。

我希望能够捕获任何引发的错误,并对它们进行格式化或将它们转换为其他错误,以更好地控制公开的信息。

我不想用 try/except 包含每个服务程序方法。

我试过使用拦截器,但我无法捕捉到那里的错误。

有没有办法为 grpc 服务器指定错误处理程序?就像你对 Flask 或任何其他 http 服务器所做的一样?

python error-handling interceptor grpc-python

8
推荐指数
1
解决办法
1778
查看次数

python dateutil unicode警告

我使用sixohsix库从Twitter API解析一些推文的数据.我试图将推文的日期转换为我的语言环境:

from pytz import timezone
from dateutil import parser

timestamp = parser.parse(tweet["created_at"])
timestamp_arg = timestamp.astimezone(timezone('America/Buenos_Aires'))
Run Code Online (Sandbox Code Playgroud)

我得到一个unicode警告:

dateutil\parser.py:339:UnicodeWarning:Unicode相等比较无法将两个参数都转换为Unicode - 将它们解释为在time.tzname中的不等elif res.tzname和res.tzname:

我试过了

parser.parse(str(tweet["created_at"]))
parser.parse(unicode(tweet["created_at"]).encode())
Run Code Online (Sandbox Code Playgroud)

但没有变化.

除了警告,似乎没有什么打破.有谁知道为什么会发生这种情况,以及如何解决这个问题?

谢谢!

更新:

我尝试了相同的例子,但硬编码时间到字符串,没有警告的情况下工作.此外,根据该警告味精问题似乎在解析调用的情况发生,在parser.py:339时做

res.tzname in time.tzname
Run Code Online (Sandbox Code Playgroud)

也许是因为res是unicode而time.tzname不是??

python unicode twitter python-dateutil

6
推荐指数
1
解决办法
2632
查看次数

flask-restul嵌套资源

我重构我的休息api服务器使用Flask-RESTful,我对某些特殊情况有一些疑问,我需要获取属于另一个的资源列表.有点像这样:

/api/v1/users/john/orders
Run Code Online (Sandbox Code Playgroud)

你会怎么设计这个?因为如果我有一个名为Orders的资源,我需要知道从哪个用户获得订单.但是我怎样才能让资源了解用户呢?我没有看到任何__ init __方法,我可以在其中指定资源的参数.

在注册Orders资源时,我考虑过这样做:

api.add_resources(Orders, '/api/v1/users/<string:username>/orders')
Run Code Online (Sandbox Code Playgroud)

但是如何在Orders资源中访问字符串:username

我想一个解决方案就是:

api.add_resources(Orders, '/api/v1/orders/') 
Run Code Online (Sandbox Code Playgroud)

并发送指定我想从中获取订单的用户的查询参数,但我想知道是否可以执行类似上面示例的操作.

python rest flask-restful

6
推荐指数
1
解决办法
2214
查看次数

pymongo group by datetime

我试图通过日期字段搜索集合和组记录,这是一个日期时间.我知道pymongo会在背景上将那些转换为正确的类型(ISODate或类似的东西).

问题是,因为datetime对象有日期,时间,时区..我怎么能告诉组操作员只使用日期部分?因为否则我没有得到所需的分组,因为时间阻止将同一天,月,年的记录组合在一起.

db.test.aggregate([
        {"$group": {
             "_id": "$date", 
             "count": {"$sum": 1}
        }},
        {"$limit": 10}])
Run Code Online (Sandbox Code Playgroud)

结果:

{u'ok': 1.0,
 u'result': [
  {u'_id': datetime.datetime(2014, 2, 15, 18, 49, 9, tzinfo=<bson.tz_util.FixedOffset object at 0x318f210>),
   u'count': 1},
  {u'_id': datetime.datetime(2014, 2, 15, 18, 36, 38, tzinfo=<bson.tz_util.FixedOffset object at 0x318f210>),
   u'count': 1},
  {u'_id': datetime.datetime(2014, 2, 15, 18, 23, 56, tzinfo=<bson.tz_util.FixedOffset object at 0x318f210>),
   u'count': 1}]}
Run Code Online (Sandbox Code Playgroud)

控制用于分组的日期时间信息会很好,

  • 仅按日期分组
  • 按日期和小时分组
  • 按日期,小时和分钟分组
  • 等等

是否有类似的东西:(或某种方式告诉仅使用日期)

db.test.aggregate([
          {"$group": {
              "_id": "$date.date()",
              "count": {"$sum": 1}
          }},
          {"$sort": "_id"}
])
Run Code Online (Sandbox Code Playgroud)

或者也许有另一种处理这个问题的方法,任何想法?谢谢.

python mongodb pymongo mongodb-query aggregation-framework

4
推荐指数
1
解决办法
2218
查看次数

python模拟第三方模块

我试图测试一些处理推文的类。我使用 Sixohsix twitter 来处理 Twitter API。我有一个类作为 Twitter 类的外观,我的想法是模拟实际的 Sixohsix 类来模拟推文的到达,方法是随机生成新推文或从数据库中检索它们。

我的外观看起来像:

from twitter import TwitterStream


class TwitterFacade(object):
    def __init__(self, dev='soom'):
        self._auth = OAuth(dev_keys["ACCESS_TOKEN"], dev_keys["ACCESS_SECRET"],   dev_keys["CONSUMER_KEY"], dev_keys["CONSUMER_SECRET"])

    def tweets(self, callback=None, users=[], terms=[], locations=[], count=5):
        t = TwitterStream(auth=self._auth)

        args = {}
        if users:     args['follow']    = ",".join(users)
        if terms:     args['track']     = ",".join(terms)
        if locations: args['locations'] = ",".join(str(l) for l in locations)

        # this controls the general loop, it re-enters if there was an exception,
        # otherwise the for loop should take care of …
Run Code Online (Sandbox Code Playgroud)

python twitter unit-testing mocking python-mock

1
推荐指数
1
解决办法
4454
查看次数