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)
  • 相关阅读:
    MQCONN failed (Reason = 2277)
    MQ打开队列模式 input和input_exclusive
    mq 消息最大长度 最大是100M
    Easyui Datagrid的Rownumber行号显示问题
    ajax请求时session已过期处理方案
    seafile Windows Memcached
    seafile 接口频度控制
    你的旧船票能否搭上这艘巨轮?——解读近5年大数据产业发展规划
    第一章 输入/输出知识
    It looks like you don't have a C compiler and make utility installed. 错误
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/9826001.html
Copyright © 2011-2022 走看看