日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

视图层详解,cbv和fbv,文件上传

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 视图层详解,cbv和fbv,文件上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

day64

  • 一.復習
  • 二.視圖層之請求對象
  • 三.視圖層之響應對象
    • 補充知識之json序列化與反序列化
  • 四.cbv和fbv
  • 五.文件上傳
  • 六.postman軟件
  • 七.form表單,提交地址
  • 八.Pycharm的自動提示

一.復習

1 web應用-通過瀏覽器訪問的服務-cs/bs-基于socket 2 Http協議-http協議版本,0.9 1.1 2.x 3.x 有什么異同-請求頭和響應頭中的key-value-請求協議-請求首行:請求方式,地址,協議和版本-請求頭-請求體-響應協議-響應首行:協議版本,狀態碼和狀態-響應頭-響應體:html,css,js-特點:-基于socket-基于請求響應-無狀態無連接-url:統一資源定位符 3 web框架-wsgiref(socket的封裝)自己寫了一個web框架-django,flask:同步框架,tornado,sanic,fastapi:異步框架-其他socket服務端(遵循WSGI協議)-wsgiref,uwsgi(c語言寫的),tornado,gunicorn(python寫的)-uwsgi+django-gunicorn+flask 4 django-安裝(虛擬環境),創建項目,創建app-配路由,寫視圖函數,models-靜態文件配置-路由配置-url函數,re_path函數,path函數,四個參數-有名,無名分組-路徑后是否加/-路由分發 include-反向解析(通過別名拿到路徑)-名稱空間-2.x的轉換器(5 str int)-自定義轉換器 5 視圖層-request對象-請求方法-get請求參數,地址欄中的參數-post請求參數,請求體中的參數(name=lqz&password=123),有的格式取不出來-http://127.0.0.1:8000/login/?name=lqz 向這個地址發送請求-response對象-三件套-render-HttpResponse-redirect 6 模型層models.py-可以創建表,可以刪除表,可以新增字段,刪除字段(不能創建數據庫)-默認使用sqlite(如果使用mysql)-寫類,寫字段-數據庫遷移,兩條命令 7 模板層-{{變量}} 8 請求生命周期,MTV和MVCweb微信如何做的?(服務端主動向客戶端推送消息)-輪詢:不停地向服務端發送請求-長輪詢:向服務端發送一個請求等待20,再發送-websocket:主動推送消息,應用層協議

二.視圖層之請求對象

def index(request):''' request:django封裝的對象,它的類是WSGIRequest,它里面包含了所有http請求的東西'''print(request)print(type(request))# from django.core.handlers.wsgi import WSGIRequest####################1 講過的print(request.method)print(request.GET)print(request.POST)####################2 新講的path,get_full_path,META,FILES,body# 自定制請求頭# 上傳文件使用的編碼方式是form-data,默認編碼方式urlencodedprint(request.is_ajax()) # 是不是ajax請求print(request.path) # 請求路徑print(request.get_full_path()) #請求全路徑 ,帶數據# print(request.body) #請求體,二進制,如果傳文件,這個報錯'''使用form表單,默認情況下數據被轉成name=lqz&password=123放到請求體中request.POST其實是從body中取出bytes格式的,轉成了字典request.GET其實是把路徑中?后面的部分拆出來,轉成了字典'''print(request.encoding) #客戶端向服務端傳遞時,使用的編碼方法print(request.META) #重點 (字典,一堆東西,請求用戶的ip地址,請求頭中數據,用戶自定制請求頭的數據)''' 把請求頭的key值部分統一加HTTP_ 并且全部轉成大寫'''print(request.META['REMOTE_ADDR']) # 客戶端的ip地址print(request.FILES) # 客戶端上傳的文件####################3 暫時不用關注(后面會講)print(request.COOKIES) #空字典print(request.session) # session對象print(request.user) # 匿名用戶return HttpResponse('ok')

三.視圖層之響應對象

### 重點:JsonResponse的使用(看源碼) from django.shortcuts import render,HttpResponse,redirect from django.http import JsonResponsedef index(request):#三件套# return HttpResponse('ok')# return render(request,'index.html',context={'name':'lqz','age':18})# return redirect('/home') # 重定向自己的地址,重定向第三方地址,經常跟反向解析一起使用 # 向客戶端返回json格式數據的兩種方式# 方式一:# import json# res = json.dumps({'name':'劉清政','age':18},ensure_ascii=False)# return HttpResponse(res)# django內置提供的JsonResponse# 本質還是HttpResponse# ensure_ascii# 方式二:# return JsonResponse({'name':'劉清政','age':18},json_dumps_params={'ensure_ascii':False})# safe,轉換除字典以外的格式,需要safe=Falsereturn JsonResponse([11,22,13,'lqz',[1,2,3],{'name':'lqz','age':19}],safe=False)

補充知識之json序列化與反序列化

import json # 數字,字符串,布爾,None,字典,列表都可以使用json序列化和反序列化 # 序列化 a = None b = False print(json.dumps(a)) # null print(json.dumps(b)) # falsell=[11,12,13,'lqz'] res = json.dumps(ll) print(res) # [11,12,13,"lqz"] print(type(res)) # <class 'str'># 反序列化 c = 'false' print(json.loads(c)) # False

四.cbv和fbv

# cbv基于類的視圖(class base view)和fbv基于函數的視圖(function base view) # 之前學的全是fbv,寫的是視圖函數# 寫視圖類(還是寫在views.py中) ## 第一步,寫一個類,繼承view from django.views import View class Index(View):def get(self,request): # 當url匹配成功,get請求,會執行它return HttpResponse('OK')def post(self,request):return HttpResponse('post') ## 第二步:配置路由 path('index/',views.Index.as_view()),# 前期,全是FBV,后期,drf全是CBV

五.文件上傳

## html注意編碼方式 <form action="/index" method="post" enctype="multipart/form-data"><p>用戶名:<input type="text" name="name"></p><p>密碼:<input type="password" name="password"></p><p><input type="file" name="myfile"></p><p><input type="submit" value="提交"></p> </form># views.py def index(request):file=request.FILES.get('myfile')# 打開一個空文件,寫入with open(file.name,'wb')as f:for line in file.chunks():f.write(line)return HttpResponse('文件上傳成功')

六.postman軟件

模擬發送http請求(控制請求路徑,請求方式,請求頭,請求體)

七.form表單,提交地址

# action #1 不寫,默認向當前地址發送請求 #2 /index/,向當前域(http://127.0.0.1:8000/)的/index/發送請求 #3 http://127.0.0.1:8000/index/,向該地址發送請求(可以向第三方服務發送請求)# method #1 post:發送post請求(默認編碼情況下:以key=value&key=value的形式拼到請求體中) #2 get:發送get請求(以key=value&key=value的形式拼到路徑中) <form action="/index/" method="post"><p>用戶名: <input type="text" name="name"></p><p>密碼: <input type="text" name="password"></p><p><input type="submit" value="提交"></p> </form>

八.Pycharm的自動提示

from django.core.handlers.wsgi import WSGIRequest # pycharm的自動提示 request=request # type:WSGIRequest

總結

以上是生活随笔為你收集整理的视图层详解,cbv和fbv,文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。