【问题标题】:Using JSON data in views在视图中使用 JSON 数据
【发布时间】:2016-02-24 14:47:30
【问题描述】:

过去几个月我一直在研究 Django-rest-framework。我不太明白如何使用 json 请求。你能帮帮我吗,我卡在这里好几个月了。

我在另一个网站上有一个第三方 html sn-p,假设它发送这个 json 数据

[{"idcomment":1,"isFlagged":false,"isDeleted":false,"isApproved":true,"createdAt":"2015-11-22T12:39:33Z","numReports":0,"isEdited":false,"message":"xcvvzvc","isSpam":false,"isHighlighted":false,"ip_address":"","is_public":true,"tree_path":"0000000001","tone":"Neutral","forum":1,"parent":null,"topic":1,"last_child":null,"user":1}][{"idcomment":1,"isFlagged":false,"isDeleted":false,"isApproved":true,"createdAt":"2015-11-22T12:39:33Z","numReports":0,"isEdited":false,"message":"xcvvzvc","isSpam":false,"isHighlighted":false,"ip_address":"","is_public":true,"tree_path":"0000000001","tone":"Neutral","forum":1,"parent":null,"topic":1,"last_child":null,"user":1}]

我的问题:我如何使用这个 json 请求数据并做一些验证,比如评论是否属于正确的主题。

我找不到任何完成的示例。所以我想通过使用类似这样的东西在 Flask 中是可能的。

mod.route("/create/", methods=["POST"])
def create():
    json = getJson(request)
    check_required(json, ['date', 'thread', 'message', 'user', 'forum'])
    uid = id_by_email(json['user'])
    fid = id_by_sname(json['forum'])
    if uid < 0 or fid < 0:
        return send_resp(json)
    if 'parent' in json:
        parent = json['parent']
    else:
        parent = None
        json['parent'] = None
    if 'isApproved' in json:
        approved = json['isApproved']
    else:
        approved = 0
        json['isApproved'] = 0
    if 'isHighlighted' in json:
        highlighted = json['isHighlighted']
    else:
        highlighted = 0
        json['isHighlighted'] = 0
    if 'isEdited' in json:
        edited = json['isEdited']
    else:
        edited = 0
        json['isEdited'] = 0
    if 'isSpam' in json:
        spam = json['isSpam']
    else:
        spam = 0
        json['isSpam'] = 0
    if 'isDeleted' in json:
        deleted = json['isDeleted']
    else:
        deleted = 0
        json['isDeleted'] = 0
    db.insert("""INSERT INTO posts (date,thread_id,message,user_id,forum_id,parent,approved,highlighted,edited,spam,deleted) 
                values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (
        json['date'], json['thread'], json['message'], uid, fid, parent, approved, highlighted, edited, spam, deleted))

    pid = db.query("SELECT LAST_INSERT_ID() as id")[0]['id']
    json['id'] = pid
    return send_resp(json)

在 django-rest-framework 中有什么替代方法。

我是新手,所以请用简单的语言解释一下。我不需要任何代码,只是搜索如何使用我到达服务器的 json 请求。

文档我看了好几遍,不费吹灰之力

免责声明:我也将通过django-rest-framework code 进行处理

【问题讨论】:

  • django rest 框架有一个非常详尽的文档,其中包括a detailed tutorial 和完全涵盖您想要的工作示例。你读了吗?
  • @spectras 是的。几次

标签: python json django rest django-rest-framework


【解决方案1】:

这项工作由您的序列化程序类处理:

我们需要开始使用 Web API 的第一件事是提供一个 将 sn-p 实例序列化和反序列化的方法 json 等表示形式。我们可以通过声明序列化器来做到这一点 它的工作方式与 Django 的表单非常相似。

序列化程序类与 Django Form 类非常相似,并且 在各个字段上包含类似的验证标志,例如 必需,max_length 和默认值。

如果您的序列化程序继承 serializer.ModelSerializer,那么它会使用您的模型来验证您的数据,例如从 form.ModelForm 继承的表单类。是的,您无需重新编写任何代码来验证您的数据,这似乎很神奇。 (DRY 概念)但是,当然,您可以在序列化程序类中定义和覆盖模型验证器。

我建议您重新阅读 Django-Rest-Framework 和特别是 Serializer 部分。它解释了 DRF 随用例提供的所有序列化程序类。

【讨论】:

  • 所以我只需要在 models.py 中进行验证吗?如果它像听起来那么简单,我会很努力的。谢谢你。我试试
  • 是的,在很多情况下,这就足够了。感谢 Django-Rest-Framework,只需几行代码,您就可以做强大的事情。就像姜戈一样。 :) DRF 的文档写得很好然后阅读它,你会发现你需要的一切:)
  • 那么,现在就用教程练习吧,不要犹豫,发布其他问题来寻求帮助。 :)
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多