我正在尝试使用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我几乎从未使用过基于阶级的观点。
答案 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。