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

Django视图层

时间:2022-11-27 21:47:12浏览次数:45  
标签:return name request 视图 Django view cls

Django视图层

目录

'''
HttpResponse,返回字符串
render,返回html页面,并且可以给html文件传值
redirect,重定向

视图函数一定会返回一个HttpResponse对象
'''

JsonResponse

from django.http import JsonResponse
user_dict = {'姓名': '123', '年龄': '123'}
return JsonResponse(user_dict, {'ensure_ascii': False})
'''ensure_ascii=True是json关键字参数默认值,通过向JsonResponse类传入用于修改这个默认值的字典可以使json不再将中文字符转为unicode编码'''
user_hobby_list = [1,2,3,4,5,6]
return JsonResponse(user_hobby_list,safe=False)
# 将非字典类型序列化需要将safe参数值设置为False

# 前后端序列化与反序列化
javascript | python
---|---
JSON.stringify() | json.dumps()
JSON.parse() | json.loads()

form表单上传文件及后端获取

# form表单上传文件类型的数据:1.method指定为post 2.enctype指定为form-data
# request.POST只能获取普通键值对信息
'''
<form action="" method="post" enctype="multipart/form-data">
    <p>username:<input type="text" name="username" class="form-control"></p>
    <p>password:<input type="text" name="password" class="form-control"></p>
    <p>file:<input type="file" name="file"></p>
    <input type="submit" value="提交">
</form>

def upload_file(request):
    if request.method == 'POST':
        file_obj = request.FILES.get('file')
        with open(file_obj.name,'wb') as f: # 没有指定文件路径,默认保存在项目文件夹下
            for line in file_obj:
                f.write(line)

    return render(request,'form.html')
'''

request对象方法

'''
request.method
request.POST
request.GET
request.Files
request.path/request.path_info 只获取路由部分
request.get_full_path() 获取用户提交url中除去ip和port后所有的路径信息(包含?后的参数)
request.body 浏览器发来的原生二进制数据
'''

FBV与CBV

# 视图层既可以是视图函数,也可以是类
url(r'^login/', views.MyLogin.as_view(), name='app02_login'),

class MyLogin(View):
    def get(self, request):
        return HttpResponse('你提交了get请求,这个请求被django识别并交由这里的代码处理')
    def post(self,request):
        return HttpResponse('你提交了post请求,这个请求被django识别并交由这里的代码处理')

CBV源码

url('login/',views.MyLogin.as_view()),
# 回顾,函数名/方法名()执行优先级最高



    @classonlymethod
    def as_view(cls, **initkwargs):
        """Main entry point for a request-response process."""
        for key in initkwargs:
            if key in cls.http_method_names:
                raise TypeError(
                    'The method name %s is not accepted as a keyword argument '
                    'to %s().' % (key, cls.__name__)
                )
            if not hasattr(cls, key):
                raise TypeError("%s() received an invalid keyword %r. as_view "
                                "only accepts arguments that are already "
                                "attributes of the class." % (cls.__name__, key))

        def view(request, *args, **kwargs):
            self = cls(**initkwargs) # self = MyLogin(**initkwargs) 产生一个Mylogin对象
            self.setup(request, *args, **kwargs)
            if not hasattr(self, 'request'):
                raise AttributeError(
                    "%s instance has no 'request' attribute. Did you override "
                    "setup() and forget to call super()?" % cls.__name__
                )
            return self.dispatch(request, *args, **kwargs)
        view.view_class = cls
        view.view_initkwargs = initkwargs

        # take name and docstring from class
        update_wrapper(view, cls, updated=())

        # and possible attributes set by decorators
        # like csrf_exempt from dispatch
        update_wrapper(view, cls.dispatch, assigned=())
        return view

# as_view()内定义了闭包函数view(),并且返回值就是view函数的内存地址,在django启动后立即执行as_view(),即得:
url('login/',views.view),

标签:return,name,request,视图,Django,view,cls
From: https://www.cnblogs.com/missfxy/p/16930673.html

相关文章

  • Django自定义系列
    Django自定义系列目录Django自定义系列模板层-自定义过滤器、标签、inclusion_tag自定义过滤器(最多两个参数)自定义过滤器调用自定义标签(可以有多个参数)自定义标签调用自定......
  • Django前后端通信
    Django前后端通信目录Django前后端通信Ajax前后端传输数据的编码格式(contentType)ajax发送json格式数据ajax发送文件django自带的序列化组件ajax结合sweetalert批量插入数......
  • Django模型层
    Django模型层目录Django模型层测试脚本单表操作查看内部sql语句的方式双下划线查询外键增删改正反向多表查询聚合查询分组查询F与Q查询开启事务ORM常用字段及参数数据库查......
  • Django模板层
    Django模板层目录Django模板层模板语法传值过滤器标签自定义过滤器、标签、inclusion_tag模板的继承模板的导入模板语法传值#模板语法形式:1.{{变量相关}}2.{%逻辑......
  • Django初识
    Django初识目录Django初识基本操作项目主要文件介绍初始技巧静态文件配置Request对象form表单request.methodrequest.POSTrequest.GETpycharm连接数据库(MySQL)django连接数......
  • Django路由层
    Django路由层目录Django路由层路由匹配无名分组有名分组反向解析无名分组反向解析有名分组反向解析路由分发名称空间伪静态虚拟环境null路由匹配#url方法第一个参数是......
  • Django版本差异
    Django版本差异#一、路由层'''django1.x路由层使用url方法django2.x/3.x路由层使用path方法可以根据习惯使用re_pathpath方法支持5种转换器'''fromdjango.ur......
  • Django-ORM简介
    DjangoORM目录DjangoORM字段的增删改查数据的增删改查创建表关系null#即对象关系模型#类——表#对象——记录#对象属性(值)——记录某个字段(值)#在models.py中写......
  • 学习笔记-Django框架的使用
    前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出!!!一.安装和创建项目1.安装1.1命令行下载pip3installdjango==1.11.11 (可以跟镜像地址:-i+镜像地址......
  • 关于 SAP UI5 XML 视图里控件事件处理函数名称中的 . (点号) 问题的讨论试读版
    本教程一位学习者向笔者提问:关于XML视图里控件事件绑定的处理函数名称,网络上找到的SAPUI5源代码,有的函数名前缀包含一个.,有的函数名中间通过.作为分割,有的函数......