用Class去写django的视图函数

以前写django项目时,只知道函数方式的写法,在Django官网的tutorial里介绍了ListView和DetailView两个类。其实普通的视图函数也可以用类的方法写。

用类的方法写视图函数,可以更好的减少代码量。

用类去写视图函数

1
2
3
4
5
6
from django.shortcuts import render
from django.views.generic.base import View

class HomePage(View):
def get(self, request):
return render(request, 'index.html')

GET接口

这个类里为HomePage定义了一个get接口

带参数的GET接口

我们的路由定义如下:

1
2
3
urlpatterns = [
url(r'^post/(?P<postID>[a-zA-Z0-9_.-]+)', PostPage.as_view())
]

带接口的GET接口这样定义:

1
2
3
4
5
6
class PostPage(View):
def get(self, request, postID):
context = {}
post = Post.objects.get(id=postID)
context["post"] = post
return render(request, 'post.html', context)

POST接口

1
2
3
class CreatePost(View):
def post(self, request):
pass

其他的方法:

  • [ ] 同时接受get,post等多种方法的接口
  • [ ] 其他可用参数

视图类函数生成url

1
2
3
4
5
6
7
8
9
from django.conf.urls import url
from django.contrib import admin

from instaclone.views import HomePage

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', HomePage.as_view())
]

用了as_view()方法去自动生成urlHandler。

参考资料

0%