首页 > 其他分享 >Django视图层

Django视图层

时间:2023-01-01 11:46:16浏览次数:38  
标签:return request 视图 Django CBV def view

目录

Django视图层

一、视图层之必会三板斧

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

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

def redirect():
    redirect_class = 类(祖先有个类是HttpResponse)
    return redirect_class()
return redirect()

二、JsonResponse对象

from django.http import JsonResponse
def index_func(request):
    user_dict = {'name':'almira', 'age':24}
    return JsonResponse(user_dict)
class JsonResponse():
    def __init__(self,data,json_dumps_params=None):
        json.dumps(data,**json_dumps_params)
JsonResponse主要序列化字典
针对非字典的其他可以被序列化的数据需要修改safe参数False

三、request对象

form表单携带文件类型的数据需要做到以下几点
    1.method必须是post
    2.enctype必须是multipart/form_data
django后端需要通过request.FILES获取文件类型的数据

四、视图层之FBV与CBV

FBV(Function Based views, 基于函数的视图)
def index(request):
    return HttpResponse对象
CBV(Class Based Views, 基于类的视图)
from django import views
class MyLoginView(view.View):
    def get(self,request):
        return HttpResponse('from CBV get function')
    def post(self,request):
        return HttpResponse('from CBV post function')
    path('login/', views.MyLoginView.as_view())
会自动根据请求方法的不同自动匹配对应的方法执行
其实,无论是FBV还是CBV,并不难
如果写的是函数那就FBV如果写的是类那就CBV
名字起的很高大上,不可怕哈哈哈

五、CBV源码剖析

1.从CBV的路由匹配切入
	path('login/', views.MyLoginView.as_view())
        1.类名点名字(名字的查找问题)
        2.类名点名字并加括号调用(静态方法、绑定给类的方法)
2.函数名加括号执行优先级最高 项目一启动就会自动执行as_view方法
	path('login/', views.view)  # CBV路由本质还是FBV
3.浏览器地址栏访问login路由需要执行view函数
	1.产生我们自己编写类的对象
 	2.对象调用dispatch方法(注意查找顺序)
4.研究父类中的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)

六、虚拟环境

pycharm创建虚拟环境>>>:相当于重新下载了全新的解释器
命令行的创建语句:python -m venv pyvenv38
此方法不支持多版本共存
激活语句命令 activate
关闭语句命令 deactivate

标签:return,request,视图,Django,CBV,def,view
From: https://www.cnblogs.com/almira998/p/17017886.html

相关文章

  • 《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视
    ......
  • Django中关于Manager的使用
    首先介绍一下manager的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用manager来实现。比如我们在前面的笔记中介绍的model的create()、update()等......
  • Django rest framework
    环境:事先安装python、虚拟环境、django,项目的创建省略。国内清华大学镜像pipinstallpython==3.10.5-ihttps://pypi.tuna.tsinghua.edu.cn/simple/pipinst......
  • 真知灼见|客户视图与工作台:金融行业呼叫中心领域驱动设计
    无论银行规模大小、类型如何,当你真正面对银行系统建设时,不可避免的需要接触银行后台诸多系统,典型的有如:银行主机前置、信用卡前置、积分系统、CIM、支付系统、短信平台、邮......
  • python 部署django项目到公网 无法连接
    https://blog.csdn.net/xiongzaiabc/article/details/108448390 服务器后台运行:https://www.jianshu.com/p/4041c4e6e1b0......
  • Django路由层
    目录路由层1.路由匹配2.转换器详3.正则匹配4.正则分组5.反向解析路由层1.路由匹配django2.X及以上path第一个参数写什么就匹配什么django1.X第一个参数是正则表达式......
  • 1007.Django模型基础02
    一、常用的查询常用的查询方法(注:User为app项目):获取所有的记录:rs=User.objects.all()获取第一条数据:rs=User.objects.first()获取最后一条数据:rs=User.objects......
  • Django与数据库连接
    目录Django与数据库连接一、form表单相关注意事项二、request对象方法三、django连接数据库Django与数据库连接一、form表单相关注意事项1.action 控制数据提交的地......
  • python的web应用程序开发(Django框架)
    python的web应用程序开发(Django框架)1.安装Django并开启网页服务器pipinstalldjango#安装Django包django-adminstartprojectmysite#在指定路径下新建一个mysite文件......
  • Django开发必备的10个第三方库
    以下的这几个第三方库,常用于Django开发中1.django-import-export:导入导出数据2.django-filter:过滤数据使用3.django-restframework:restful-Api使用4.pymysql:......