zoukankan      html  css  js  c++  java
  • django notes 四: Writing views

    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  更加灵活, 应该尽量多使用。

  • 相关阅读:
    重温redis命令
    CI框架整合yar
    redis 常用配置
    php 安装yar扩展
    linux 最小安装 需要的后续操作
    centos7 安装php7+mysql5.7+nginx+redis
    mysql 存储过程和事件调度
    mysql的分区和分表
    mysql 范式和反范式
    mysql服务器和配置优化
  • 原文地址:https://www.cnblogs.com/lesliefang/p/4696982.html
Copyright © 2011-2022 走看看