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

原文地址:https://www.cnblogs.com/sunch/p/9735605.html