• django框架基础视图系统长期维护


    ##################   什么是视图?     #######################

    视图:
    
    1,一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
    2,响应可以是一张网页的HTML内容(使用render),一个重定向(使用redirect),一个404错误,一个XML文档,或者一张图片。
    3,无论视图本身包含什么逻辑,必须要返回响应,否则程序会报错。
    为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。

    ##################   视图----CBV和FBV  #######################

    CBV和FBV
    CBV就是class base view  FBV就是function base view,
    之前都是写的基于函数的视图,现在要写一个基于类的视图,
    
    写对应关系的时候有变化:
    # url(r'^add_publisher/', views.add_publisher),#这是FBV
    url(r'^add_publisher/', views.AddPublisher.as_view()),##这是CBV

    ###########################################################

    # CBV版添加班级
    from django.views import View
    class AddClass(View):
    
        def get(self, request):
            return render(request, "add_class.html")
    
        def post(self, request):
            class_name = request.POST.get("class_name")
            models.Classes.objects.create(name=class_name)
            return redirect("/class_list/")

    ##################   视图--Request对象     #######################

    Request对象
    
    request.path_info  这是获取用户请求的路径,路径后面的参数是不会取到的,
    request.method  获取请求的方法,get,post
    request.GET   返回一个字典对象,通常是用来获取url里面的参数,
    request.POST   返回一个字典对象,通常是一个表单提交的数据,
    reuqest.body  byte类型.这是获取请求的body,get请求的body是空的,post请求的body是填写的内容,这个不常用,

    ##################   视图     #######################

    上传文件的HTML代码:

    <form action="/upload/" method="post" enctype="multipart/form-data">
    {#enctype="multipart/form-data" 这一句一定要写,否则会导致上传文件拿不到的,#}
    {#文件和不同的字符串是不一样的,如果文件比较大,会一点一点的传#}
    <input type="file" name="upload_file">
    <input type="submit" value="开始上传">
    </form>

    对应的视图函数:

    # 处理上传的文件,
    def upload(request):
        """
           保存上传文件前,数据需要存放在某个位置。默认当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。从内存读取一次,写磁盘一次。
           但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。
           :param request:
           :return:
           """
        if request.method == "POST":
            # 从请求的FILES中获取上传文件的文件名,file为页面上type=files类型input的name属性值
            filename = request.FILES["upload_file"].name  # 这是拿到了文件名,
            # 在项目目录下新建一个文件
            with open(filename, "wb") as f:  # wb以二进制的方式,
                # 从上传的文件对象中一点一点读
                for chunk in request.FILES["upload_file"].chunks():  # chunks():这是一个固定的写法,一点点的传值,
                    # FILES["upload_file"] 这个列表中的是在html定义的file的name,所以可以写多个,
                    # 写入本地文件
                    f.write(chunk)
            return HttpResponse("上传OK")
        else:
            return render(request, 'file_upload.html')

    ##################   视图--response对象     #######################

    response对象
    基础必备三件套,
    1,httpresponse,这是返回一个字符串
    2,render,这是返回一个页面
    3,redirect,这是返回一个重定向,告诉浏览器再去访问另外的网址,

    ##################   视图---jsonresponse对象     #######################

    jsonresponse对象,
    真实的web开发,不是既写前端,又写后端的,你只需要写后端,后端给前端返回的数据都是什么格式的呢???
    返回的都是json字符串,这是一种通用的数据格式,前端js拿到之后把数据渲染到页面上,

    代码:

    def json_test(request):
        data = {'name': 'xiaohei', 'age': '18'}
        data2 = [1, 2, 3, 4]
        ################################################################
        # import json
        # json_data=json.dumps(data) #这是转换成一个json字符串,
        # return HttpResponse(json_data)
        # 这是你写api的时候一个非常常用的需求,就是把数据封装成一个json传给前端,然后让前端去处理,
        ##################################################################
        # 还有一个简单的方法,django内置了一个jsonresponse,
        from django.http import JsonResponse
        return JsonResponse(data)
        return JsonResponse(data2, safe=False)
        # 如果传的列表会有问题,但是加上safe=False,可以传到前端,但是一般不会传列表过去,

    ##################   视图     #######################

    常用视图响应的方式是什么?
    
    response对象
    基础必备三件套,
    1,httpresponse,这是返回一个字符串
    2,render,这是返回一个页面
    3,redirect,这是返回一个重定向,告诉浏览器再去访问另外的网址,
    
    
    4,返回json数据,可以使用JsonResponse来构造响应对象
     
    帮助我们将数据转换为json字符串 
    设置响应头Content-Type为 application/json 
    例子:from django.http import JsonResponse 
               def demo_view(request): 
                   return JsonResponse({‘city’: ‘beijing’, ‘subject’: ‘python’})

    ###################################################

    ###################################################

    ###################################################

  • 相关阅读:
    你有犯错的权利
    面对人生这道程序,该如何编码?
    如何面对失败?
    知行:成长的迭代之路
    一份软件工程行业生存指南
    知行:程序员如何保持二者的平衡
    花钱的习惯
    互联网金融涌动下的冲动与借债
    docker 常用命令
    java 静态变量 静态代码块 加载顺序问题
  • 原文地址:https://www.cnblogs.com/andy0816/p/12197669.html
Copyright © 2020-2023  润新知