DJango 学习(9)—— 视图层介绍

本文介绍了Django视图层的核心功能,包括使用HttpResponse返回字符串,render生成HTML并传递值,redirect进行页面重定向。还详细讲解了JsonResponse在前后端数据交互中的作用,以及如何处理JSON格式数据。同时,讨论了文件上传的表单要求和实现方法,以及request对象的各种方法。最后,对比了函数式视图(FBV)和类视图(CBV)的差异,并展示了CBV的源码分析。
摘要由CSDN通过智能技术生成

视图层

三板斧

"""
HttpResponse
	返回字符串类型

render
	返回 HTML 页面 并且还可以给 html 页面传值

redirect
	重定向
	
	
视图函数必须要返回一个 HttpResponse


render 简单的内部原理
	from django.template import Template.Context
	res = Template("<h1>{{ user }}</h1>")
	con = Context({"user": { "username":"jason", "password": 123 }})
	ret = res.render(con)
	print(ret)
	
	return HttpResponse(ret)
"""

JsonResponse对象

"""
json 格式的数据的作用
	前后端数据交互需要 json 作为过渡 实现跨语言传输数据
	
"""
# 前端序列化
	JSON.stringify()
    JSON.parse()

# 给前端浏览器返回一个 json 格式的字符串
from django.http import JsonResponse

def ab_json(request):
    user_dict = {
        "username": "aoteman奥特曼",
        "password": "123"
    }

    l = [111, 222, 333]

    # return JsonResponse(user_dict) # 会 “乱码”

    # return JsonResponse(user_dict, json_dumps_params={"ensure_ascii": False})

    return JsonResponse(l, safe=False)

文件上传以及获取

"""
form 表单上传文件
	1. method 必须为 post
	2. enctype 必须换成 form-data
"""
def ab_file(request):
    if request.method == "POST":
        # print(request.POST) # 拿不到文件数据,只能获取键值对数据
        print(request.FILES) # 获取文件数据

        file_obj = request.FILES.get("file") # 文件对象
        print(file_obj.name)

        with open(file_obj.name, "wb") as f:
            for line in file_obj.chunks():
                f.write(line)

    return render(request, "form.html")

request 对象方法

"""
request.GET
request.POST
request.method
request.FILES

request.path # 只拿到路由
request.path_info
request.get_full_path # 不仅拿到路由,还包括问好后面的参数

request.body # 原生浏览器发送的二进制数据
"""

FBV 和 CBV

# 视图函数既可以是函数也可以是类

# CBV
from django.views import View

class MyLogin(View):
    def get(self, request):
        return render(request, "form.html")
    def post(self, request):
        return HttpResponse("post方法")
    
urls(r"^cbv/", views.MyLogin.as_view())

"""
两者各有千秋

CBV 特点
	能够直接根据请求方式的不同直接匹配到对应的方法执行
"""

CBV源码剖析

views.MyLogin.as_view()

"""
函数名/方法名  加括号执行优先级最高
猜测
	as_view()
		要么是被@staticmethod 修饰的静态方法
		要么是被@classmethod 修饰的类方法
	
	@classonlymethod
	def as_view(cls, **initkwargs):
		psss
		
	# 根据源码分析,上述代码再启动 django 的时候就会立刻执行 as_view 方法
	# url(r"^login", view.view) 和 FBV 一样
	# CBV 和 FBV 再本质上是一样的 都是 路由 对应函数内存地址
"""

请添加图片描述

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值