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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python的Web框架,Django框架中的请求与响应

發(fā)布時(shí)間:2025/7/25 python 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的Web框架,Django框架中的请求与响应 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

請(qǐng)求與響應(yīng)

簡(jiǎn)單流程圖

我們先來了解一個(gè)請(qǐng)求與響應(yīng)的大概流程?

視圖函數(shù)接受到的request到底是個(gè)什么對(duì)象呢?

服務(wù)器接收到http協(xié)議的請(qǐng)求后,會(huì)根據(jù)報(bào)文創(chuàng)建HttpRequest對(duì)象視圖函數(shù)的第一個(gè)參數(shù)是HttpRequest對(duì)象在django.http模塊中定義了HttpRequest對(duì)象的API,下面我們來列出這個(gè)對(duì)象的方法。

request屬性說明
path一個(gè)字符串,表示請(qǐng)求頁(yè)面的完整路徑,不包括域名
method一個(gè)字符串,表示請(qǐng)求使用的HTTP方法,常用值包括:'GET'、'POST'
*encoding一個(gè)字符串,表示提交的數(shù)據(jù)的編碼方式,
GTE一個(gè)類似于字典的對(duì)象,包含get請(qǐng)求方式的所有參數(shù)
POST一個(gè)類似于字典的對(duì)象,包含post請(qǐng)求方式的所有參數(shù)
FILES一個(gè)類似于字典的對(duì)象,包含所有的上傳文件
COOKIES一個(gè)標(biāo)準(zhǔn)的python字典,包含所有的cookie,鍵和值都為字符串
sessin一個(gè)即可讀有可寫的類似字典的對(duì)象,表示當(dāng)前的會(huì)話,只有當(dāng)Django啟動(dòng)會(huì)話的支持時(shí)才可用,詳細(xì)內(nèi)容見"狀態(tài)保存"
方法:is_ajax()如果請(qǐng)求是通過XMLHttpRequest發(fā)起的,則返回True

*encoding:如果為None則表示使用瀏覽器的默認(rèn)設(shè)置,一般為utf-8,這個(gè)屬性是可寫的,可以通過修改它來修改訪問表單數(shù)據(jù)使用的編碼,接下來對(duì)屬性的任何訪問將使用新的encoding值

POST登錄提交的html例子

html中的form表單解析

1 <form action="提交地址,為空為當(dāng)前頁(yè)" method="默認(rèn)為POST請(qǐng)求"> 2 3 # 如果是post請(qǐng)求,會(huì)有安全的問題,需要加上csrf的方法,才可以使用post請(qǐng)求。 4 {% csrf_token %} 5 6 <p>用戶名:<input type="text" name="必須要給的屬性,用于后臺(tái)獲取參數(shù)得到的key"></p> 7 <p>密碼:<input type="password" name="必須要給的屬性,用于后臺(tái)獲取參數(shù)得到的key"></p> 8 <p>用戶名:<input type="submit" value="登錄"></p> 9 </form>

?

views中的簡(jiǎn)單邏輯判斷寫法:

因?yàn)榈卿涰?yè)面有GET請(qǐng)求,也有POST的請(qǐng)求,所以需要再視圖的時(shí)候需要進(jìn)行判斷,做出反應(yīng)。

1 def login(request): 2 3 if request.method =='POST' 4 5 # userame和password 這個(gè)key是前端網(wǎng)頁(yè)傳過來的類似的字典方式。 6 username = request.POST.get('username','') 7 password = request.POST.get('password','') 8 9 # 如果賬號(hào)和密碼是對(duì)的,則跳轉(zhuǎn)到首頁(yè) 10 if username == 'aaa' and password == '123456': 11 return redirect(reverse('teacher:index')) 12 else: 13 此處添加賬戶密碼錯(cuò)誤的返回結(jié)果 14 15 # 如果是GET方法則把login頁(yè)面返回過去 16 return render(request, 'teacher/login.html')

?

get以及post方式訪問如何的獲取多個(gè)參數(shù)

當(dāng)網(wǎng)頁(yè)是get訪問的時(shí)候,且是多個(gè)參數(shù)的時(shí)候,取值是什么樣的呢。

訪問的網(wǎng)頁(yè)url例子: http://127.0.0.1:8000/teacher/login/?hobby=籃球&hobby=足球&hobby=羽毛球

?

正常的取值方法,只能獲取到一個(gè)值

#一鍵多值的情況下,只能拿到一個(gè)值 >>> request.GET.get('hobby') '羽毛球'

?

getlist:拿多個(gè)值的時(shí)候,需要getlist

>>> request.GET.getlist('hobby') ['籃球','足球','羽毛球'] POST方法相同,只需要修改'GET''POST'即可。

文件上傳

需要設(shè)置上傳文件存放的路徑,setting中設(shè)置,同時(shí)需要新建文件夾。

1 #測(cè)試用的,名字可以隨意取,暫時(shí)路徑為根目錄下的文件夾。 2 UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')

?

html中form的基礎(chǔ)寫法

1 <form action="" method="post" enctype="multipart/form-data"> 2 {% scrf_token %} 3 <p>請(qǐng)選擇你要上傳的文件:<input type="file" name="file" multiple></p> 4 <p><input type="submit" value="上傳"></p> 5 </form> 6 7 enctype="multipart/form-data":只有form表帶擁有這個(gè)屬性的時(shí)候,才有上傳文件的功能 8 multiple:選擇文件需要帶有才可以上傳多個(gè)文件

?

配置view: 判斷file,如果有文件,則創(chuàng)建文件夾(文件夾名為當(dāng)天日期)

1 from datetime import datetime 2 from crm.setting import UPLOAD_ROOT 3 import os 4 5 def upload(request): 6 if request.method == 'POST': 7 files = request.FILES.getlist('file', None) 8 #如果有多個(gè)文件,則循環(huán)取出, 9 for file in files: 10 #文件名 11 day_dir = datetime.noe.strftime('%Y%m%d') 12 #絕對(duì)路徑拼接 13 pre_dir = os.path.join(UPLOAD_ROOT,day_dir) 14 15 #判斷文件夾是否存在,需要注意當(dāng)前用戶是否有權(quán)限 16 if not os.path.exists(pre_dir): 17 os.mkdir(pre_dir) #如果不存在則創(chuàng)建文件夾 18 19 # 拿到用戶上傳過來的文件名,和路徑拼接 20 filename = os.path.join(pre_dir, file.name) 21 22 # 寫數(shù)據(jù)(二進(jìn)制) 23 with open(filename, 'wb') as f: 24 #chunks是一個(gè)以文件流的形式取值。如果文件較大,以read的方式取值則會(huì)耗費(fèi)資源。 25 for line in file.chunks(): 26 f.write(line) 27 return HttpResponse('上傳成功') 28 29 return render(request, 'teacher/upload.html')

?

?

HTTPResponse對(duì)象:

from django.http import HttpResponse

?

屬性作用
content表示返回的內(nèi)容,字節(jié)類型
charset表示response采用的編碼字符集,字符串類型
status_code響應(yīng)的HTTP響應(yīng)狀態(tài)碼
content-type指定輸出的MIME類型,請(qǐng)求頭
方法作用
init使用頁(yè)內(nèi)容實(shí)例化HttpResponse對(duì)象
write(content)以文件的方式寫,可以分次寫
flush()以文件的方式輸出緩存區(qū)
set_cookie(key, value='', max_age=None, expires=None)設(shè)置Cookie
key、value都是字符串類型
max_age是一個(gè)整數(shù),表示在指定數(shù)秒后過期
expires是一個(gè)datetime或timedelta對(duì)象,會(huì)話將在這個(gè)指定的日期/時(shí)間過期。
max_age與expires二選一max_age與expires二選一,如果不指定過期時(shí)間,則關(guān)閉瀏覽器就失效
deleta_cookie(key)刪除指定的key的cookie,如果key不存在則數(shù)秒也不發(fā)送

*expires:注意datetime和timedelta值只有在使用PickleSerializer時(shí)才可序列化。

JsonResponse 返回json數(shù)據(jù),只能接受字典類型

如何返回一個(gè)json數(shù)據(jù),這里先演示一個(gè)查詢數(shù)據(jù)的接口 1 def students_api(request): 2 sex = request.GET.get('sex','') 3 sex = int(sex) 4 res = Students.objects.values('name','age','sex','phone').filter(sex=sex) 5 res = dect('data':res) 6 return JsonResponse(res)

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/hua888/p/10469663.html

總結(jié)

以上是生活随笔為你收集整理的python的Web框架,Django框架中的请求与响应的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。