0
class UserProfile(models.Model):
    """
    Extending the Django User.


    """

    user = models.OneToOneField(User,unique=True)
    image_id = models.CharField(max_length=50,blank=True)

    is_email_validated = models.BolleanField(default = False)

    followers_count = models.IntegerField(max_length=5,default=0,blank=True,null=True)

    following_users = ModelListField()
    follower_users = ModelListField()

    def __unicode__(self):
        return u"%s" % self.user.first_name

    def full_name(self):
        return u"%s" % self.user.first_name + '' + self.user.last_name

    def email(self):
        return self.user.email

    def username(self):
        return self.user.username

    def books_count(self):
        return len(self.user.get_profile().books)

    def create_user_profile(sender,instance,created,**kwargs):
        if created:
            UserProfile.objects.create(user=instance)
            action.send(type="create_user",actor=instance,target=instance)
    post_save.connect(create_user_profile,sender=User)

したがって、どうすればそれからAPIを作成できますか? ハンドラーを書かなければなりませんか? (このような状況で Django Tastypie がどのように動作するかはかなり混乱しています。)

GET /users//following のような API 呼び出しのデータを返すハンドラーを作成できます。しかし、これはtastypieで行われている方法ですか?はいの場合、ハンドラーを API に接続するにはどうすればよいですか?

編集:このようなことは、次のようにdjango-pistonで行うことができます:

from piston.handler import BaseHandler
from piston.utils import rc

from app.apps.user.models import User, UserProfile


class UserHandler(BaseHandler):
    model = User

    def read(self, request, user_id=None, action=None):
        """
        GET /users/


        following - GET /users/<user_id>/following
        followers - GET /users/<user_id>/followers
        user profile - GET /users/<user_id>/        
        """


        if action =="following":
            return self.following(request, user_id)
        elif action == "followers":
            return self.followers(request, user_id)
        else:
            return self.get_user_profile(request, user_id)      

    def get_user_profile(self, request, user_id):
        """
        User Profile
        GET /users/<user_id>/
        """
        user = User.objects.get(pk=user_id)

        user_session = request.user
        user_session_following = user_session.get_profile().following_users

        if user.id in user_session_following:
            follow_status=True
        else:        
            follow_status=False

        return user_actions.get_user_profile(user, follow_status)
4

1 に答える 1

1

app/apps/user/api.py に入れます

from tastypie.resources import ModelResource
from django.contrib.auth.models import User

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'

そしてあなたの urls.py で

from django.conf.urls.defaults import * 
from app.apps.user.api import UserResource

v1_api = Api(api_name='v1') #api_name will be 'v1' in http://localhost:8000/v1/?format=json
v1_api.register(UserProfileResource())    

urlpatterns = patterns('',
    (r'^api/', include(v1_api.urls)), 
)

ここで大雑把なことを言うつもりはありませんが、ドキュメント、特にクイックスタートを読むと役立ちます。

あなたのAPIは(あなたのdevserverで)公開されています

   http://localhost:8000/api/v1/?format=json

それで全部です。たとえば、次のように、コードを記述する必要はありません。

 - retrieve all users in json:
   http://localhost:8000/api/v1/user/?format=json

 - retrieve the entry in the user table with the key 1
   http://localhost:8000/api/v1/user/1/?format=json

 - retrieve the meta information about your UserResource
   http://localhost:8000/api/v1/user/schema/?format=json

これがお役に立てば幸いです!

于 2012-10-14T18:37:03.080 に答える