zoukankan      html  css  js  c++  java
  • Django之视图层

    视图函数必须要返回一个HttpResponse对象

    JsonResponse对象

    向前端返回Json格式的字符串

    复制代码
    from django.http import JsonResponse
    import json def xxx(request): user_dict = {'username':'你好帅,我好喜欢!','password':'123'} # json_str = json.dumps(user_dict,ensure_ascii=False) # return HttpResponse(json_str) l = [1,2,3,4,5,6,7,8,9,] # return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False}) return JsonResponse(l,safe=False) # 序列化非字典格式数据 需要将safe改为False
    复制代码

    Form表单上传文件

    upload.html

     view.py

    复制代码
    def upload(request):
        if request.method == 'POST':
            #获取用户上传的文件数据
            print(request.FILES)
            file_obj = request.FILES.get('myfile')  #可以把file_obj看作是一个文件句柄
            print(file_obj.name) #获取文件名
            with open(file_obj.name,'wb')as f:
                for line in file_obj:
                    f.write(line)
                    
        return render(request,'upload.html')
    复制代码

    FBV和CBV

    视图函数并不一定就是函数,也可以是类,django的视图层由两种形式构成:FBV和CBV

    FBV:基于函数的视图

    CBV:基于类的视图

    CBV基本写法

    urls.py

    url(r'^login/', views.MyLogin.as_view())

    views.py

    复制代码
    from django.views import View
    
    class MyLogin(View):
        def get(self,request):
            return render(request,'login.html')
        def post(self,request):
            return HttpResponse('我是类里面的post方法')

    # 我们会发现,朝login提交get请求会自动执行MyLogin里面的get方法
    # 而提交post请求会自动执行MyLogin里面的post方法
    复制代码

    基于以上发现,我们想一想,为什么MyLogin针对不同的请求方法能够自动执行对应的方法,我们可以来看下源码。研究源码的突破口就是

    url(r'^login/', views.MyLogin.as_view()) 
    #FBV与CBV在路由匹配上本质是一样的,都是路由与函数内存地址的对应关系

    猜想,as_view要么是类里面定义的普通函数 @staticmethod

    要么是类里面定义的绑定给类的方法 @classmethod,

    看源码发现是绑定给类的方法。下面是源码分析

  • 相关阅读:
    Java调用存储过程
    Eclipse快捷键
    [转载]实现GridView手动设定分页
    给博客换了个皮肤
    在Hibernate中使用Oracle的sequence主键
    解决Oracle 10g中The account lockde!
    [转载]CSS的优化与技巧
    PowerDesigner12 简单应用
    【转载】用开源软件搭建企业内部协作平台, Kill QQ MSN
    DropDownList数据绑定第一项为空
  • 原文地址:https://www.cnblogs.com/wddxx/p/13789403.html
Copyright © 2011-2022 走看看