1. 程式人生 > >django學習第79天Django視圖層

django學習第79天Django視圖層

json dumps 客戶端 code views one -- get pub

一.request對象

        method:請求方式
        GET:get請求的參數(post請求,也可以攜帶參數)
        POST:post請求的參數(本質是從bdoy中取出來,放到裏面了)
        COOKIES--->後面講
        META:字典(放著好多東西,前端傳過來的,一定能從其中拿出來,包括客戶端的Ip,客戶端的所有請求)
        body:post提交的數據
        path:請求的路徑,不帶參數
        request.get_full_path() 請求路徑,帶參數 (這參數是指?id=10這種的)
        session---後面講
        user---後面講
        FILES
        encoding:編碼格式
        is_ajax()---後面講(判斷是否是ajax請求)

二.HttpResponse對象

        -三件套(render.redirect.reverse)
render(request, ‘模板名字‘,{key:value}) -JsonResponse:往前端返回json格式數據(沒有它,我可以自己寫) -轉列表格式:指定safe=False -中文字符問題:json_dumps_params={‘ensure_ascii‘:False}
本質封裝了json.dumps
    # 第一種方式
    # import json
    # data={‘name‘:‘lqz‘,‘age‘:18}
    # data1=[‘lqz‘,‘egon‘]
    # return HttpResponse(json.dumps(data1))
    # 第二種方式
    from django.http import JsonResponse
    # data = {‘name‘: ‘lqz‘, ‘age‘: 18}
    data1 = [‘lqz‘, ‘egon‘]
    # return JsonResponse(data)
    return JsonResponse(data1,safe=False)
 

三.CBV(基於類的視圖)和FBV(基於函數的視圖)

        -cbv:一個路由寫一個類
        -在視圖層先定義一個類:繼承自View
            from django.views import View
            class MyClass(View):
                # 當前端發get請求,會響應到這個函數
                def get(self, request):
                    return render(request,‘index.html‘)
                # 當前端發post請求,會響應到這個函數
                def post(self,request):
                    print(request.POST.get(‘name‘))
                    return HttpResponse(‘cbv--post‘)
        -在路由層:
            re_path(‘^myclass/$‘,views.MyClass.as_view()),

四.文件上傳

        -form表單默認提交的編碼方式是enctype="application/x-www-form-urlencoded"
        -前端:如果要form表單上傳文件,必須指定編碼方式為:enctype=multipart/form-data,method=‘post
        -後端:
            file=request.FILES.get(‘myfile‘) 
            #打開空文件,用for 循環讀file,寫入空文件
with open(file.name,‘wb‘) as f: #文件路徑要先拼接好(os.path.jion(path,file.name),沒設置默認在該項目目錄下 for line in file: f.write(line)

五.圖書表設計

圖書管理系統
        -表:
        book表
        author表
        publish表
        
  -一對一:一對多的關系一旦確立,關聯字段寫在哪都可以 對應orm中的models.OneToOneField(to=‘‘,to_filed=‘‘)
  -一對多:一對多的關系一旦確立,關聯關系寫在多的一方 對應orm中的models.ForeignKey(to=‘‘,to_filed=‘‘)
  -多對多:多對多的關系,必須創建第三張表(中間表) 對應orm中的models.ManyToManyField(to=‘‘)自動創建第三張表


django學習第79天Django視圖層