python – Django rest-framework

我正在编写一个基于Django rest-framework的rest API应用程序.我想以
JSON格式返回我的模型数据

我的模特是:

from os import path
from django.db import models
from django.contrib import admin
from django.core.files.storage import FileSystemStorage

#------------------------------------------------------------------------------ 

projectDirPath = path.dirname(path.dirname(__file__)) 
storeImageDir = FileSystemStorage(location=projectDirPath + '/couponRestApiApp/stores')


class tags(models.Model):
    """ This is the tag model """
    tag = models.CharField(max_length=15)               # Tag name
    tagDescription = models.TextField()                 # Tag Description
    tagSlug = models.CharField(max_length=400)          # Extra info can be added to the existing tag using this field
    createdAt = models.DateTimeField(auto_now_add=True) # Time at which tag is created
    updatedAt = models.DateTimeField(auto_now=True)     # Time at which tag is updated

    def __unicode__(self):
        """Method to display string correctly"""
        return unicode(self.tag)
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Tags"


class stores(models.Model):
    """ This is the store model """
    storeName = models.CharField(max_length=15)                                          # Store Name
    storeDescription = models.TextField()                                                # Store Description
    storeURL = models.URLField()                                                         # Store URL
    storePopularityNumber = models.IntegerField(max_length=1)                            # Store Popularity Number  
    storeImage = models.ImageField(upload_to="images")                                   # Store Image 
    storeSlug = models.CharField(max_length=400)                                         # This is the text you see in the URL
    createdAt = models.DateTimeField(auto_now_add=True)                                  # Time at which store is created
    updatedAt = models.DateTimeField(auto_now=True)                                      # Time at which store is updated
    storeTags = models.ManyToManyField(tags)                                             # All the tags associated with the store

    def __unicode__(self):
        """Method to display string correctly"""
        return unicode(self.storeName)
    def StoreTags(self):
        return '\n'.join([s.tag for s in self.storeTags.all()])
    def StoreImage(self):    
        return '<img src="/media/couponRestApiApp/stores/%s" height="150"/>' % (self.storeImage)
    StoreImage.allow_tags = True
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Stores"


class coupons(models.Model):
    """ This is the coupon model """
    couponValue = models.CharField(max_length=4)                              # Coupon value in RS.
    couponDescription = models.TextField()                                    # Coupon Description
    couponURL = models.URLField()                                             # Coupon click URL
    couponStore = models.ForeignKey(stores)                                   # Key of coupon to store
    tagName = models.ForeignKey(tags,on_delete=models.PROTECT)                # Tag names associated to coupon
    success = models.TextField()                                              # Count of the number of times people have made it work
    failures =  models.TextField()                                            # Count of the number of times this has failed
    lastTested = models.DateTimeField(auto_now=True)                          # When was the coupon last tested
    createdAt = models.DateTimeField(auto_now_add=True)
    updatedAt = models.DateTimeField(auto_now=True)
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Coupons"


class app(models.Model):
    """ This is the application model which is using the API """
    appName = models.CharField(max_length=20)                       # Application name
    appDomain = models.CharField(max_length=20)                     # Application description
    appKey =  models.TextField()                                    # Application Key 
    createdAt = models.DateTimeField(auto_now_add=True)             # Time at which Application is added is created
    updatedAt = models.DateTimeField(auto_now=True)                 # Time at which Application details are updated
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Apps"



class subscriptions(models.Model):    
    """ These are the emails that are subscribing """  
    app =  models.CharField(max_length=20)                                # The application where the email came from
    store = models.CharField(max_length=20)                               # The optional store on which the email wants an update
    tag =   models.CharField(max_length=20)                               # The optional tag on which the email wants an update
    emailID = models.EmailField()                                         # EmailID of the registered user
    active =  models.BooleanField(default=True)                           # They may have unsubscribed
    createdAt = models.DateTimeField(auto_now_add=True)                   # Time at user subscribed to the alerts
    updatedAt = models.DateTimeField(auto_now=True)                       # Time at which user updated its subscription 
    class Meta:
        """Meta class to control display Behavior of the Model name """
        verbose_name_plural = "Subscriptions"     


class tagsAdmin(admin.ModelAdmin):
    list_display = ('tag', 'tagDescription', 'tagSlug')


class storesAdmin(admin.ModelAdmin):
    list_display = ('storeName','storeDescription','storeURL',
                    'storePopularityNumber','StoreImage',
                    'storeSlug','createdAt','createdAt','StoreTags'
                    )

class couponsAdmin(admin.ModelAdmin):
    list_display = ('couponValue','couponDescription','couponValue',
                    'couponURL', 'couponStore','tagName','success',
                    'failures','createdAt','updatedAt'
                    )

class appsAdmin(admin.ModelAdmin):
    list_display = ('appName','appDomain','appKey',
                    'createdAt','updatedAt'                    
                    )


class subcriptionsAdmin(admin.ModelAdmin):
    list_display = ('app','store','tag','emailID',
                    'active','createdAt','updatedAt'
                    )

admin.site.register(tags,tagsAdmin)
admin.site.register(stores,storesAdmin)
admin.site.register(coupons,couponsAdmin)
admin.site.register(app,appsAdmin)
admin.site.register(subscriptions,subcriptionsAdmin)

#------------------------------------------------------------------------------ 

我在views.py中写了一个类:

from rest_framework import status
from rest_framework.views import View
from rest_framework.response import Response
from couponRestApiApp.models import app,coupons,stores,subscriptions,tags

————————————————– —————————-

class getAllStores(View):
    """
    Provides access to all orders within the system.
    """


    def get(self, request):
        """
        Return a list of all orders.
        """ 
        storeResponse = [i.storeName for i in stores.objects.all()]
        print storeResponse
        return (storeResponse)

我的URL.py是:

from django.contrib import admin
from couponRestApiApp.views import getAllStores
from django.conf.urls import patterns, include, url
#------------------------------------------------------------------------------

admin.autodiscover()

urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
         {'document_root': "/home/vaibhav/TRAC/coupon-rest-api/couponRestApi/", 'show_indexes': False}),
    url(r'^stores/$',getAllStores.as_view(), name='getAllStores'),
)

但是如果我发出请求(http:// localhost:8000 / stores /),则抛出以下错误:’list’对象没有属性’status_code’

请告诉我如何使用rest-framework将模型数据序列化为JSON对象….

最佳答案

class getAllStores(generics.ListAPIView,APIView):
    """
    Provides access to all orders within the system.
    """

    model = stores # Model name
    serializer_class = getAllStoresDetailSerializer # Call serializer

    def get_queryset(self):    
        return stores.objects.filter()

串行:

class getAllStoresDetailSerializer(serializers.ModelSerializer):

    storeTags = serializers.Field(source='StoreTags')
    storeImage = serializers.Field(source='storeImage')

    class Meta:
        model = stores
        fields = ('storeName','storeDescription',
                  'storeURL','storePopularityNumber','storeImage','storeTags',
                    'storeSlug','createdAt','updatedAt','StoreCoupons'
                 )

我认为你必须修改storeImage方法,以便在服务器上提供图像的路径……或者为此定义新的方法….

点赞