操作 TastyPie 和 Django 的请求数据 API

Manipulate Request data of TastyPie and Django API

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

Models.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

Resources.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']

现在的问题是,每当我从 postman 到达 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 中使用 tastypie 做到这一点。

如有任何帮助,我们将不胜感激

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

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

在每个 Web 框架中,随请求一起发送的数据通过某种机制传递到 api 端点,同样的事情发生在 Tastypie 中(您可以在 Flow Through The Request/Response Cycle 下的 Tastypie 文档中阅读相关信息).

如果您想更改 sending/receiving 阅读的关于 Hydrate/Dehydrate, in your case you want to use dehydrate on user password but I recommend you to save the effort and instead use custom user model by inheriting from AbstractUser 的数据,这样当用户对象保存到您的数据库时,您可以默认获取散列密码。