簡體   English   中英

JSON / Django HTTP請求

[英]JSON/Django http request

我已經寫了一些django代碼,可以讓我請求一些數據並將其返回為JSON格式。

我要求: http http://127.0.0.0.8000/api/club

[
    {
        "name": "Liverpool FC",
        "abv": "LFC",
        "stadium": "Anfield",
        "manager": "Jurgen Klopp",
        "trophies": "50"
    },
    {
        "name": "Manchester City",
        "abv": "MC",
        "stadium": "Etihad",
        "manager": "Manuel Pellegrini",
        "trophies": "14"
    },
    {
        "name": "Manchester United",
        "abv": "MU",
        "stadium": "Old Trafford",
        "manager": "Louis Van Gaal",
        "trophies": "46"
    }
]

是否可以僅請求“ Liverpool FC”的數據,以便僅返回請求。 我可以通過http http://127.0.0.0.8000/api/club/1/來做到這一點,但我希望能夠輸入像http http://127.0.0.0.8000/api/club/liverpool/這樣的團隊名稱http http://127.0.0.0.8000/api/club/liverpool/

{
    "name": "Liverpool FC",
    "abv": "LFC",
    "stadium": "Anfield",
    "manager": "Jurgen Klopp",
    "trophies": "50"
}

編輯:添加了兩個py文件

views.py

    # Create your views here.
    class FishViewSet(viewsets.ModelViewSet):
        # this fetches all the rows of data in the Fish table
        queryset = Fish.objects.all()
        serializer_class = FishSerializer

    # Create your views here.
    class TeamViewSet(viewsets.ModelViewSet):
        # this fetches all the rows of data in the Fish table
        queryset = Team.objects.all()
        serializer_class = TeamSerializer

    # Create your views here.
    class ClubViewSet(viewsets.ModelViewSet):
        # this fetches all the rows of data in the Fish table
        queryset = Club.objects.all()
        serializer_class = ClubSerializer

def getClub(request, club_name):
    queryset = Club.objects.get(name=club_name)

models.py

class Fish(models.Model):
        name = models.CharField(max_length=255)
        created = models.DateTimeField('auto_now_add=True')
        active = models.BooleanField()

class Team(models.Model):
        starting = models.CharField(max_length=255)
        captain = models.CharField(max_length=255)
        value = models.CharField(max_length=255)
        fixtures = models.CharField(max_length=255)
        position = models.CharField(max_length=255)

class Club(models.Model):
        name = models.CharField(max_length=255)
        abv = models.CharField(max_length=255)
        stadium = models.CharField(max_length=255)
        manager = models.CharField(max_length=255)
        trophies = models.CharField(max_length=255)

urls.py

router = routers.DefaultRouter()
#makes sure that the API endpoints work
router.register(r'api/fishes', views.FishViewSet)
router.register(r'api/teams', views.TeamViewSet)
router.register(r'api/club', views.ClubViewSet)

admin.autodiscover()

urlpatterns = router.urls

url(r'^admin/', include(admin.site.urls)),
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
url(r'^/api/club/(?P<club_name>[a-zA-Z]+)/$', ('getClub'))

我知道使用正則表達式的簡單方法

在url.py中添加此正則表達式

url(r'^/api/club/(?P<club_name>[a-zA-Z]+)/$', ....)

然后在視圖中添加一個方法,將club_name變量像這樣

from django.http import HttpResponse

def getclub(request, club_name):
    teaminfo = ModelName.objects.get(name=club_name) # something like that
    return HttpResponse(teaminfo)

club_name變量將從正則表達式獲取字符串,您可以隨時使用它。

這是一個簡單的很好的參考

https://docs.djangoproject.com/zh-CN/1.9/intro/tutorial03/

問題是您在視圖中使用queryset = Team.objects.all() 從本質上講,這意味着您將獲得所有對象。

我有一個類似的程序,我像這樣使用urls.py

...
url(r'^teams/(?P<incoming_team>[^/]+)/$', ('team_stats')),
url(r'^teams/', ('team_stats_all')),

在視圖中看起來像:

def team_stats(request, incoming_team):
    queryset = Team.objects.get(name=incoming_team)

顯然,您現有的視圖將用於所有視圖。 我還要注意,如果您有重復的團隊,或者您請求的團隊不存在,則需要進行“嘗試/除外”處理。

(實際上,我實際上並沒有像這樣將它們分成單獨的視圖,但是它使您對邏輯流程有所了解)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM