2017-08-30 33 views
0

我正在用django-tastypie編寫一個應用程序,以下是我的models.py和resource.py文件。操縱TastyPie和Django API的請求數據

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

現在的事情是,每當我打從郵遞員的API端點,用戶直接創建。現在我不明白的是請求數據是進入資源,然後進入數據庫還是直接進入數據庫?事實上,我需要在數據存儲到數據庫之前對數據進行一些更改,例如對密碼進行哈希處理,然後將對象存儲在數據庫中。我是django的新手,那我該怎麼做到呢? 像瓶,我們可以這樣做:

@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() 

現在,如果任何請求是在'/用戶的終端,我們可以得到它在數據的「數據」變量,那麼無論變化,我們存儲在之前想數據庫。但如何在django中用tastypie做到這一點。

任何幫助,將不勝感激

回答

1

如果你有進入database然後Tastypiehydratedehydrate方法的概念之前,按摩的數據。

檢查。這裏是參考hydrate and dehydrate

+1

你明白上面的解決方案@FarhatNawaz – Sanket

+0

是的,我這樣做。這正是我所期待的。謝謝 –

0

在每個Web框架中,與通過某種機制傳遞給api端點的請求一起發送的數據發生在Tastypie中(您可以在Tastypie文檔中的Flow Through The Request/Response Cycle下閱讀它)。

如果你想改變你發送數據/接收閱讀Hydrate/Dehydrate,你的情況,你想用脫水用戶的密碼,但我建議你保存的努力,而是由AbstractUser繼承使用自定義的用戶模型,這樣,當用戶對象保存到您的數據庫時,默認情況下您可以獲得哈希密碼。

+0

謝謝,夥計。這真的很有幫助 –

+0

很高興幫助:) – shlomta1