【问题标题】:Manipulate Request data of TastyPie and Django API操作 TastyPie 和 Django API 的请求数据
【发布时间】:2017-08-30 07:16:31
【问题描述】:

我正在用 django-tastypie 编写一个应用程序,下面是我的 models.py 和 resource.py 文件。

模型.py:

import uuid

from django.db import models


class User(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=50, null=False)
    email = models.EmailField(max_length=254, null=False)
    password = models.CharField(max_length=100, null=False)
    role = models.CharField(max_length=16, default='basic', null=False)

    def __unicode__(self):
        return self.name, self.email

资源.py:

from tastypie.resources import ModelResource
from tastypie.authorization import Authorization

from api.models import User


class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        authorization = Authorization()
        excludes = ['password']
        #allowed_methods = ['get']

现在的问题是,每当我从邮递员处访问 API 端点时,都会直接创建用户。现在我不明白的是,请求数据是进入资源然后进入数据库还是直接进入数据库?实际上,问题是我需要在数据存储到数据库之前对数据进行一些更改,例如对密码进行哈希处理,然后将对象存储到数据库中。我是 django 的新手,那么我该如何实现呢? 就像在 Flask 中一样,我们可以这样做:

@user.route('/users', methods=['POST'])
def create_user(user_id):

    data = request.get_json(force=True)

    # do all the changes we want

    user = User(data)
    db.session.add(user)
    db.session.commit()

现在,如果有任何请求来自 '/users' 端点,我们可以在 'data' 变量中获取它的数据,然后在存储到数据库之前进行任何我们想要的更改。但是如何在 django 中用 sweetpie 做到这一点。

任何帮助将不胜感激

【问题讨论】:

    标签: python django tastypie


    【解决方案1】:

    如果您必须在进入database 之前处理数据,那么Tastypie 具有hydratedehydrate 方法的概念。

    检查一下。这里是参考hydrate and dehydrate

    【讨论】:

    • 以上解决方法你看懂了吗@FarhatNawaz
    • 是的,我愿意。这正是我想要的。谢谢
    【解决方案2】:

    在每个 Web 框架中,与请求一起发送的数据通过某种机制传递到 api 端点,同样的事情发生在 Tastypie 中(您可以在 Flow Through The Request/Response Cycle 下的 Tastypie 文档中了解它)。

    如果您想更改您发送/接收的有关Hydrate/Dehydrate 的数据,在您的情况下,您想对用户密码使用脱水,但我建议您省力,而是通过从 @ 继承来使用自定义用户模型987654323@,这样当用户对象被保存到你的数据库时,你可以默认得到哈希密码。

    【讨论】:

    • 谢谢你,伙计。这真的很有帮助
    • 很高兴为您提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2016-08-26
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多