在视图中使用JSON数据

时间:2015-11-22 13:03:09

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

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

我在另一个网站上有第三方html片段,并假设它发送此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

1 个答案:

答案 0 :(得分:1)

此作业由序列化程序类处理:

  

我们需要开始使用Web API的第一件事就是提供一个   将代码段实例序列化和反序列化的方法   像json这样的表示。我们可以通过声明序列化器来完成此操作   这与Django的形式非常相似。

     

序列化程序类与Django Form类非常相似,并且   包括各种字段上的类似验证标志,例如   required,max_length和default。

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

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