• Django进阶-视图系统


    概述

    一个视图函数(类),简称视图,接收web请求(request)并且返回web响应(return)

    无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。

    CBV和FBV

    CBV: 基于类

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

    使用CBV时,urls.py中也做对应的修改:url(r'^add_class/$', views.AddClass.as_view()),

    FBV: 基于函数

    # FBV版添加班级
    def add_class(request):
        if request.method == "POST":
            class_name = request.POST.get("class_name")
            models.Classes.objects.create(name=class_name)
            return redirect("/class_list/")
        return render(request, "add_class.html")
    views.py

    urls.py中也做对应: url(r'^add_class/$', views.add_class),

    Request请求相关

    request.method        获取请求的方法(GET POST等)
    request.GET            获取URL里面的参数
    request.POST           获取POST提交过来的数据
                        提交的数据是多个的时候一定要用
                        request.POST.getlist("value")
    
    request.path_info    获取用户请求的路径
    request.get_full_path()    获取用户请求的路径+参数 request.body 请求体 request.FILES 上传过来的文件

    上传文件的例子

    def upload(request):
        if request.method == 'POST':
            # file_name = request.FILES['file'].name
            file_name = request.FILES.get('file').name  # 获取上传的文件名字
            print(type(file_name), file_name)
            with open(file_name, 'wb') as f:
                # for i in request.FILES['file'].chunks():
                for i in request.FILES.get('file').chunks():  # 从上传过来的文件对象中一点一点的读
                    f.write(i)  # 写入本地文件
            return HttpResponse("上传成功")
    
        return render(request, 'upload.html')
    views.py

    html文件里,表单上传文件要加上:encype = "multipart/form-data"

    Response响应相关

    可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。

    1. HttpResponse   --> 返回字符串内容
    2. render         --> 返回一个html页面             
    3. redirect       --> 返回一个重定向(告诉浏览器再去访问另外的网址)
    
    4. JsonResponse      --> 返回 json字符串 格式

    JsonResponse的例子

    from django.http import JsonResponse

    def test_json(request):
        dic = {"aa": 11, 'bb': 22}
        lis = ['11', '22', '33']
        # return JsonResponse(dic)
        return JsonResponse(lis, safe=False)
    views.py

    默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。  --> 设成 safe=False

  • 相关阅读:
    视频4K技术的解读
    C语言野指针
    获取一个整数所有的质因数(C语言实现)
    乘法口诀表(C语言实现)
    完全平方数(C语言实现)
    Socket网络编程系列教程序
    求1-2/3+3/5-4/7+......49/97和(C语言实现)
    反射
    Cloneable接口和Object的clone()方法
    Comparable和Comparator的区别
  • 原文地址:https://www.cnblogs.com/sunch/p/9735605.html
Copyright © 2020-2023  润新知