首页 > 编程语言 >视图层必会三板斧、JsonResponse对象、视图层之FBV和CBV、CBV源码解剖、模板层前戏

视图层必会三板斧、JsonResponse对象、视图层之FBV和CBV、CBV源码解剖、模板层前戏

时间:2022-12-13 22:36:42浏览次数:58  
标签:return 三板斧 request 视图 json CBV 模板

  • 视图层之必会三板斧

  • JsonResponse对象

  • 视图层之request对象获取文件

  • 视图层之FBV与CBV

  • CBV源码剖析(重要)

  • 模板层

视图层之必会三板斧

# 用来处理请求的视图函数都必须返回HttpResonse对象
   完全正确
    
# HttpResonse
class HttpResonse:
     pass
return HttpResonse()

image

# render
def render():
    return HttpResponse()
return render()

image

# redirect
def redirect():
    redirect_class = 类(祖先有个类是HttpResponse)
    return redirect_class()
return redirect()
'''多继承'''

image

JsonResponse对象

  • json模块
user_dict = {'name':'jason','age':18}
import json
user_json = json.dumps(user_dict)
return HttpResponse(user_json)

image

user_dict = {'name':'jason','age':18,'hobby':'起飞'}
import json
user_json = json.dumps(user_dict)
return HttpResponse(user_json)

'''出现乱码'''

image

ensure_ascii=False

image

  • JsonResponse对象
from django.http import JsonResponse
user_dict = {'name': 'jason', 'age': 18, 'hobby': '起飞'}
return JsonResponse(user_dict, json_dumps_params={'ensure_ascii': False})

image

ps:以后写代码很多时候可能需要参考源码及所学知识扩展功能
	class JsonResponse(HttpResponse):
        def __init__(self,data,json_dumps_params=None):
        		json.dumps(data,**json_dumps_params)
          
JsonResponse主要序列化字典 针对非字典的其他可以被序列化的数据需要修改safe参数为False

视图层之request对象获取文件

# form表单上传文件
form表单携带文件类型的数据需要做到以下几点

1.method必须是post

2.enctype必须修改为multipart/form-data
  	# 默认是application/x-www-form-urlencoded

image

3.django后端需要通过request.FILES获取文件类型的数据

image

视图层之FBV与CBV

FBV
     基于函数的视图
    def index(request):return HttpResponse对象
    
CBV
     基于类的视图
    from django import views
  	 class MyLoginView(views.View):
        def get(self, request):
            return HttpResponse('from CBV get function')

        def post(self, request):
            return HttpResponse('from CBV post function')
     
CBV路由匹配:
	path('login/', views.MyLoginView.as_view())
    """
 	如果请求方式是GET 则会自动执行类里面的get方法
 	如果请求方式是POST 则会自动执行类里面的post方法
 	"""

image

image

CBV源码解剖(重要)

# 切入点:路由匹配
path('login/', views.MyLoginView.as_view())
类名点名字(名字的查找问题)
类名点名字并加括号调用(静态方法、绑定给类的方法)
as_view 可能是普通的静态方法
as_view 可能是绑定给类的方法

# 独享查找属性的顺序
先从对象自身开始、再从产生对象的类、之后是各个父类
MyLoginView.as_view()
先从我们自己写的MyLoginView中查找
   没有再去父类Views中查找
    
# 函数名加括号执行优先级最高
项目一启动就会自动执行as_view方法
path('login/', views.view)  # CBV路由本质还是FBV

# 浏览器地址栏访问login路由需要执行view函数
产生我们自己编写类的对象
对象调用dispatch方法(注意查找顺序)

# 研究父类中的dispatch方法
获取当前请求方法并转小写 之后利用反射获取类中对应的方法并执行


class View:
     @classmethod
     def as_view(cls, **initkwargs):
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            return self.dispatch(request, *args, **kwargs)
     def dispatch(self, request, *args, **kwargs):
         handler = getattr(self, request.method.lower())
         return handler(request, *args, **kwargs)

image

image

模板层

"""
django提供的模板语法只有两个符号
	{{}}:主要用于数据值相关操作(引用)
	{%%}:主要用于逻辑相关操作(循环、判断)
	
django的模板语法是自己写的 跟jinja2不一样
1.针对需要加括号调用的名字 django模板语法会自动加括号调用你只需要写名字就行
2.模板语法的注释前端浏览器是无法查看的 {##}
"""

# 模板语法传值的两种方式
传值方式1:精准传值 不浪费资源 针对多资源的传递书写麻烦
     name = 'gavin'
 return render(request, 'mb_a文件.html',{'name':name})

传值方式2:将函数名称空间中所有的名字全部传递 名字过多并且不使用的情况下比较浪费资源
return render(request, 'ab_temp.html', locals())
'''locals() 将当前名称空间中所有的名字全部传递给html页面'''

# 模板语法传值特性
1.基本数据类型正常展示
2.文件对象也可以展示并调用方法
3.函数名会自动加括号执行并将返回值展示到页面上(不支持额外传参)
4.类名也会自动加括号调用
5.对象则不会	
ps:总结针对可以加括号调用的名字模板语法都会自动加括号调用

模板语法之过滤器(内置函数)

过滤器 用法 代码
last 获取列表/元组的最后一个成员 {{liast | last}}
first 获取列表/元组的第一个成员 {{list|first}}
length 获取数据的长度 {{list | length}}
defualt 当变量没有值的情况下, 系统输出默认值, {{str|default="默认值"}}
safe 让系统不要对内容中的html代码进行实体转义 {{htmlcontent| safe}}
upper 字母转换成大写 {{str | upper}}
lower 字母转换成小写 {{str | lower}}
title 每个单词首字母转换成大写 {{str | title}}
date 日期时间格式转换 `{{ value
cut 从内容中截取掉同样字符的内容 {{content | cut:"hello"}}
list 把内容转换成列表格式 {{content | list}}
add 加法 {{num| add}}
filesizeformat 把文件大小的数值转换成单位表示 {{filesize | filesizeformat}}
join 按指定字符拼接内容 {{list| join("-")}}
random 随机提取某个成员 {list | random}}
slice 按切片提取成员 {{list | slice:":-2"}}
truncatechars 按字符长度截取内容 {{content | truncatechars:30}}
truncatewords 按单词长度截取内容 同上

标签:return,三板斧,request,视图,json,CBV,模板
From: https://www.cnblogs.com/super-xz/p/16980858.html

相关文章

  • 路由分发、名称空间、虚拟环境、视图层三板斧、JsonResponse对象、request对象获取文
    今日内容详细路由分发​ django的每一个应用都可以有自己独立的路由层(urls.py)静态文件(static文件夹)模板层(templates文件夹)​ 基于这个特性多人开发项目就可以完全解......
  • Django路由层补充,视图层解析
    目录Django路由层补充,视图层解析今日内容概要今日内容详细路由分发名称空间虚拟环境视图层之必会三板斧前端出现乱码JsonResponse对象视图层之request对象获取文件视图层之......
  • Django之视图层
    目录视图层必会三板斧伪静态(了解)JsonResponse对象request对象获取文件FBV与CBVCBV源码解析模板层视图层django视图层:Django项目下的views.py文件,它的内部是一系列的函......
  • 路由分发 虚拟变量 JsonResponse对象 视图层CBV和FBV 模板层
    今日内容概要路由分发django支持每个应用都可以有自己独立的路由层、静态文件、模板层基于该特性多人开发项目就可以完全解耦合之后利用路由分发还可以整合到一起......
  • django视图层详解
    内容概要路由分发名称空间虚拟环境视图层必会三板斧视图层JsonResponse对象视图层request对象获取文件视图层FBV与CBVCBV源码剖析内容详细路由发分发django支......
  • 进入python的世界_day51_Django之视图层、模板层
    一、路由分发django中应用都可以有自己独立的urls.py文件templates文件夹static文件夹能够让基于django开发的多个应用完全独立便于小组开发能分能收整个dj项目下......
  • Django:视图层
    目录Django视图层编写视图一、视图函数必会三板斧1.HttpResponse()2.render3.redirect二、JsonResponse1.json模块进行序列化2.JsonResponse(1)实例(2)JsonResponse源码学习三......
  • Djiango框架:5、pycharm虚拟环境,视图层之三板斧、JsonResponse对象、request对象、FBV
    Django框架目录Django框架一、pycharm虚拟环境1、简介2、创建方法二、视图层1、视图层必会三板斧2、JsonResponse对象3、视图层之request对象获取文件4、request对象获......
  • django 04 视图层
    视图层三剑客(render,HttpResponse,redirect)#1.用于处理请求的视图函数都必须返回HttpResponse对象"""render,HttpResponse的底层都是HttpResponseredi......
  • django框架——路由分发、名称空间、虚拟环境、视图层
    django框架——路由分发、名称空间、虚拟环境、视图层一、路由分发 django支持每个应用都有自己独立的路由层、静态文件、模板层,基于该特性,多人开发的项目就可以完全的解......