如何创建Django restful URL模式?

时间:2015-10-07 07:31:48

标签: python django rest django-views

我正在尝试使用django中基于类的视图创建一个restful api。

class SomeAPI(MultiDetailView):
    def get(self,request,format=None):
        #some logic
    def post(self,request,format=None):
        #some logic

我想处理像www.pathtowebsite.com/api?var1=<someval>&var2=<someval>&var3=<someval>

这样的获取请求

我的帖子网址为www.pathtowebsite.com/api/unique_token=<token_id>

基本上,get请求会根据某些参数生成唯一令牌,而post请求会使用该令牌发布。

在这种情况下,我的网址文件会如何?

P.S我几乎从未使用过基于阶级的观点。

1 个答案:

答案 0 :(得分:1)

首先:DRF会为您完成大量的工作,甚至可以在您的API中生成一致的网址。如果你想在Django URL调度程序中学习如何做这样的事情,那么你可以在你的URL中嵌入正则表达式:

项目/ urls.py:     来自django.conf.urls import url

from project.app.views import SprocketView

urlpatterns = [
    url(r'^api/obj_name/(P<id>[a-f0-9]{24})/$', SprocketView.as_view()),
    url(r'^api/obj_name/unique_token=(P<id>[a-f0-9]{24})/$', SprocketView.as_view()),
    ]

项目/应用/ views.py

from django.shortcuts import get_object_or_404
from django.views.generic import View
from .forms import SprocketForm
from .models import Sprocket

class SprocketView(View):

    def get(request, id):
        object = get_object_or_404(Sprocket, pk=id)
        return render(request, "sprocket.html", {'object':object}

    def post(request, id):
        object = Sprocket.get_or_create(pk=id)
        object = SprocketForm(request.POST, initial=object).save(commit=False)
        object.user = request.user
        object.save()
        return render(request, "sprocket.html", {'object':object, 'saved':True})

这是框架应该从你身上提升的功能,我建议阅读Django CBV。我可以全心全意地推荐的一个资源是Two Scoops