Django之JsonResponse類的使用


內容概要

  • JsonResponse類的使用
  • form表單上傳文件
  • CBV和FBV
  • CBV的源碼分析
  • 模板層

內容詳細

JsonResponse類的使用

        # 1. 混合開發項目:前端頁面和后端代碼寫到一塊
        # 2. 前后端分離項目:前端是一個項目,后端是一個項目,后端只需要寫接口

        json格式的數據:進行跨語言數據傳輸

        import json
        '''支持的數據類型:str,list, tuple, dict, set'''
        # 序列化出來的數據是可以看得懂的,就是一個字符串
        dumps
        loads

        dump
        load

        import pickle
        '''支持的數據類型:python中的所有數據類型'''
        # 序列化出來的結果看不懂,因為結果是一個二進制
        # pickle序列化出的來的數據只能在python中使用
        dumps
        loads

        dump
        load

        # js中如何序列化?
        JSON.stringify()  # 序列化
        JSON.parse()      # 反序列化

        **在形參和實參中的用法不一樣
        from django.http import JsonResponse

        def index(request):
            # print(123)
            # return HttpResponse('ok')
            # return redirect()
            # return render()
            user_dict = {'username':'ly很帥', 'password':123}
            l = [1, 2, 3]
            # json_str = json.dumps(l, ensure_ascii=False)

            # return HttpResponse(json_str)
            # return JsonResponse(user_dict, json_dumps_params={'ensure_ascii':False})
            return JsonResponse(l,safe=False)

form表單上傳文件

        上傳文件注意事項:
            1. 必須是post請求
            2. enctype='multipart/form-data'

        后端:
            在request.FILES中接收文件數據,其他數據一律按照請求方式接收

        form表單可以傳遞的數據格式:
            1. urlencoded
            2. form-data
         # 不能提交json格式的數據

        '''提交json格式的數據:
            1. ajax
            2. 第三方工具
                postman
                apizza
        '''

        數據格式:
            1. urlencoded
            2. form-data
            3. json格式

           if request.method == 'POST':
                print(request.FILES)
                file_obj = request.FILES.get('myfile')
                print(file_obj.name)  # 文件名
                import random
                import uuid
                aa = str(uuid.uuid4()) + '.png'
                with open(aa, 'wb') as f:
                    for line in file_obj:
                        f.write(line)
            return render(request, 'upload_file.html')

CBV和FBV

        FBV: function based view
        CBV: class based view
        class IndexView(View):
            def get(self, request):
                print('get')
                return HttpResponse('get')
            def post(self, request):
                print('post')
                return HttpResponse('POST')

        #  url(r'^indexCbv/', views.IndexView.as_view()),

CBV的源碼

        如何通過請求方式確定的方法?

        #############入口################################
                    def view(request, *args, **kwargs):
                    self = cls(**initkwargs)  # self = IndexView(**initkwargs)
                    # self => IndexView
                    return self.dispatch(request, *args, **kwargs)
        ##############核心方法################################
            def dispatch(self, request, *args, **kwargs):
                # GET POST  => get post
                if request.method.lower() in self.http_method_names:
                    # 反射:get set has del
                    handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
                else:
                    handler = self.http_method_not_allowed
                return handler(request, *args, **kwargs)  # get(request, *args, **kwargs)

模板語法

        1. 傳值
        # 跟變量相關的都使用雙括號 {{}}
        # 跟邏輯相關的都使用 {%  %}

        '''模板文件中取值一律使用點語法 . '''

        # 在模板文件里面的函數,不用加括號,會自動加括號調用, 不能傳遞參數

模板語法之過濾器

        # 相當於python里面的內置方法

        語法:
            {{變量|過濾器:參數}}

        過濾器有很多個,大概有六七十,我們只需要掌握5個左右
        1. length
        2. defalut
        3. date
        4. filesizeformat
        5. safe

        # 過濾器里面最多傳兩個參數,至少一個參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM