zoukankan      html  css  js  c++  java
  • django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

    一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。

    一 视图的实现可以基于两种方法:

    1 基于函数的形式 FBV

    使用装饰器装饰FBV 

    直接在上面添加

    @wrapper
    def display(request):

    2 基于类的方式实现CBV

    使用 装饰器装饰CBV

    二 dispatch()

    # 使用CBV时要注意,请求过来后会先执行dispatch()这个方法,如果需要批量对具体的请求处理方法,如get,post等做一些操作的时候,
    这里我们可以手动改写dispatch方法,这个dispatch方法就和在FBV上加装饰器的效果一样。

    例如;

    class Login(View):
         
        def dispatch(self, request, *args, **kwargs):
            print('before')
            obj = super(Login,self).dispatch(request, *args, **kwargs)
            print('after')
            return obj
     
        def get(self,request):
            return render(request,'login.html')
     
        def post(self,request):
            print(request.POST.get('user'))
            return HttpResponse('Login.post')

     三 request对象

    当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
    Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

    请求相关的常用值

    • path_info     返回用户访问url,不包括域名
    • method        请求中使用的HTTP方法的字符串表示,全大写表示。
    • GET              包含所有HTTP  GET参数的类字典对象
    • POST           包含所有HTTP POST参数的类字典对象
    • body            请求体,byte类型 request.POST的数据就是从body里面提取到的

    下面让我们来看看 path_info 和body

    当输入的是中文的时候

    下面看一个上传文件的例子 Request.FILES

    四Response对象

    JsonResponse对象

    前后端传递的一般是json文件

    import json
    from django.http import JsonResponse
    def data_json(request):
        data={'name':"xinxin",'age':30}
        return HttpResponse(json.dumps(data)) #Content-Type: text/html; charset=utf-8
        # return JsonResponse(data) #Content-Type: application/json

     如果使用非字典的形式会报错,如何解决,加上safe=False

    In order to allow non-dict objects to be serialized set the safe parameter to False.
    def data_json(request):
        data_list=[1,2,3]
        # return JsonResponse(data_list)
        return JsonResponse(data_list,safe=False)
  • 相关阅读:
    OpenYurt v0.4.0 新特性发布:高效地管理边缘存储资源
    OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能
    dubbo-go v3 版本 go module 踩坑记
    阿里云携手 VMware 共建云原生 IoT 生态,聚开源社区合力打造领域标准
    一文告诉你Java日期时间API到底有多烂
    LocalDateTime、OffsetDateTime、ZonedDateTime互转,这一篇绝对喂饱你
    全球城市ZoneId和UTC时间偏移量的最全对照表
    全网最全!彻底弄透Java处理GMT/UTC日期时间
    GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
    如何保证Redis高可用和高并发
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/9826001.html
Copyright © 2011-2022 走看看