2017-08-30 4 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。

すべてのヘルプはあなたがdatabaseに入る前にデータをマッサージする必要がある場合は、Tastypiehydratedehydrate方法の概念を持ってい

答えて

1

をいただければ幸いです。

を確認してください。 hydrate and dehydrate

+1

上記の解決策を理解していますか@FarhatNawaz – Sanket

+0

ええ、そうです。それはまさに私が探していたものです。ありがとう、ありがとう、仲間 –

0

すべてのWebフレームワークで、リクエストとともに送信されたデータは、何らかのメカニズムで同じエンドポイントに渡され、同じことがTastypieで発生します(これについてはTastypieのドキュメントFlow Through The Request/Response Cycleで読むことができます)。

あなたはについてHydrate/Dehydrateを読んで送信/受信データを変更したい場合は、あなたのケースでは、ユーザーのパスワードに脱水使用したいが、私は労力を節約し、代わりにAbstractUserから継承したカスタム・ユーザー・モデルを使用することをお勧めいたします、そうすれば、ユーザーオブジェクトがDBに保存されているときに、デフォルトでハッシュパスワードを取得できます。

+0

それは本当に役に立ちました –

+0

喜んで:) – shlomta1

関連する問題