码迷,mamicode.com
首页 > 其他好文 > 详细

django notes 四: Writing views

时间:2015-08-03 00:44:41      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

views 其实没什么可看的, 在  django  中 views 就是 controller, 是处理请求的, 就是一个普通的 python 方法。

一般从 request 中提取请求参数, 然后处理业务逻辑, 跟数据库和后台服务做交互,取回数据,渲染模板,将返回结果包装进  HttpResponse 然后返回。

def view_index(request):
    return HttpResponse(content=hello world)


def view_index(request):
    name = request.GET.get(name, ‘‘)
    age = request.POST.get(age, 0)
    return render(request, blogs/index.html, {name: leslie, age: 27})


def view_comments(request):
    return JsonResponse(data={hello: world})

怎么处理 cookie, 得到用户 UA 等等直接参考源码就行了。

 

Class-based views

为什么会有 Class-based views  首先 在 function views 中必须用 if  else 来分别处理 get 和 post 请求,

而在 class  中你可以用 2 个 method 分别处理 get  和 post

以前是这样的

def my_view(request):
    if request.method == GET:
        # <view logic>
        return HttpResponse(result)

而且 Class-based views  可以充分利用面向对象和继承  mixins 等特殊,更加灵活, 代码复用度更高。

现在是这样的

urlpatterns = [
    url(r^index/$, Index.as_view())
]

class Index(View):
    http_method_names = [get, post]

    def get(self, request, *args, **kwargs):
        return HttpResponse(hello class based view)

    def post(self, request, *args, **kwargs):
        pass

而且 django 内置了很多好用的 generic class-based views 和 mixin classes,只需简单继承或 mixin 进来就可灵活定制,非常方便

urlpatterns = [
    url(r^about/, TemplateView.as_view(template_name="about.html")),
]

as_view 其实是一个 classmethod ,定义在 View 类中,  as_view 中会调用  dispatch 方法, dispatch 其实最后调用的还是 get 或 post 方法

最后调用的还是一个 function, 跟 function view 没有什么区别。 具体实现参考源码。

class-based views  更加灵活, 应该尽量多使用。

 

django notes 四: Writing views

标签:

原文地址:http://www.cnblogs.com/lesliefang/p/4696982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!