1. 程式人生 > >Django學習總結之中介軟體與檔案操作

Django學習總結之中介軟體與檔案操作

中介軟體: 面向切面程式設計   底層輕量級外掛
        可以介入請求與響應
​
        咱們以前接觸的程式設計方式:
            python:面向物件
            C語言:面向過程    
​
            喝茶:
                面向物件:燒開水  泡茶    -->  找個傭人  把這些全部給我實現了               我只做喝茶的事情
                面向過程:燒開水   所有東西自己實現
​
        request.META['REMOTE_ADDR']  拿到訪問的IP地址
        在對異常攔截的時候一定要注意:
            1.將debug模式調為True,然後把對外網的公佈給關掉
            2.在切面函式裡面進行反向解析時會報型別錯誤,建議直接返回結果
            3.異常最好不要try,交給系統執行,然後由系統處理
        搶優惠券,第一:跳轉的url一定要注意
                第二:url寫的時候,注意後面把斜槓加上
                第三:先判斷來的路徑  然後再去獲取提交的使用者名稱
​

        程式碼示例:
            def process_request(self,request):
​
                ip = request.META["REMOTE_ADDR"]
                print(ip)
​
                if request.path == "/App/qiang/":
                    uname = request.POST.get('username')
                    print(uname)
                    if uname == "zhoujiajia":
                        return HttpResponse("你這輩子算搶不到了")
                    elif ip == "10.8.153.137":
                        return HttpResponse("充錢吧")
檔案上傳:
        配置資訊:
            
第一步:在工程目錄下建立一個靜態資料夾:static
            第二步:將static資料夾配置到settings檔案下方
                    STATICFILES_DIRS = [
                        os.path.join(BASE_DIR,'static')
                    ]
            第三步:在static資料夾下面建立一個新的資料夾,命名問uploadefiles
​
            第四步:在settings下方配置uploadefiles路徑資訊
                MEDIA_ROOT=os.path.join(BASE_DIR,r'static/uploadefiles')
檔案載入:
   
 def get_file(request,id):
        # 根據路由傳參匹配物件
        users = UserModel.objects.filter(pk=id)
        user = users.first()
​
        # 這裡必須要使用.url使用,返回一個相對路徑
        url = "/static/uploadefiles/" + user.u_icon.url
​
        #將拿到得路徑返回給頁面
        print(url)
        data = {
            "u_icon":url ,
        }
        return render(request, "image.html", context=data)
分頁:
    
def get_user(request, page_num):
        # 拿到資料集
        users = UserModel.objects.all()
        # 將資料集以及每頁顯示多少條放到物件裡
        paginator = Paginator(users, 3)
​
        # 拿到你想要看的那一頁的資料集合
        page = paginator.page(page_num)
​
        # 當前頁面上所有的資料物件
        object_list = page.object_list
​
        return render(request, 'userlist.html', context={"users":object_list})