Django常見數(shù)據(jù)類型提交葛闷、解析與響應(yīng)

Request請求

http協(xié)議向客戶端傳參四種形式

  1. URL地址拼接傳參
    • 傳參示例:傳遞名字和年齡
      http://127.0.0.1:8000/user/index/xiaowang/26
    • 解析方式:
      路由正則內(nèi)增加匹配:url(r'users/index/(?P<name>[a-zA-Z]+)/(?P<age>\d+)', views.index)
      對應(yīng)視圖函數(shù)寫法:
def index(request,name,age):
     print("name: %s, age: %s" % (name,age))
  1. URL查詢字符串傳參
    寫法:?key=value&...
    • 傳參示例:傳遞名字和年齡
      http://127.0.0.1:8000/user/index/?name=xiaozhang&age=26
    • 解析方式:
def index(request):
     querydict = request.GET
     name = querydict.get("name")
     age = querydict.get("age")
  1. 請求體傳參
  • 可以發(fā)送請求體數(shù)據(jù)的請求方式有POST镰踏、PUT蹬音、PATCH、DELETE。
  • Django默認(rèn)開啟了CSRF防護(hù)征椒,會對上述請求方式進(jìn)行CSRF防護(hù)驗(yàn)證,在測試時可以關(guān)閉CSRF防護(hù)機(jī)制湃累,方法為在settings.py文件中注釋掉CSRF中間件行:django.middleware.csrf.CsrfViewMiddleware
  • POST表單請求
    • 請求體傳參不顯示在url信息中
    • 解析方式:
    def get_postbody(request):
        name = request.POST.get("name")
        password = request.POST.get("password)
    

重要:request.POST只能用來獲取POST方式的請求體表單數(shù)據(jù)勃救,其余請求體獲取數(shù)據(jù)均采用下述的request.body

  • 非表單類型 Non-Form Data
    • 非表單類型的請求體數(shù)據(jù),Django無法自動解析治力,可以通過request.body屬性獲取最原始的請求體數(shù)據(jù)蒙秒,自己按照請求體格式(JSON、XML等)進(jìn)行解析宵统。request.body返回bytes類型晕讲。
    • 解析方式:例如獲取json數(shù)據(jù):
    import json
    
    def get_body_json(request):
        json_str = request.body
        json_str = json_str.decode()  # python3.6 無  需執(zhí)行此步
        req_data = json.loads(json_str)
        print(req_data['a'])
        print(req_data['b'])
        return HttpResponse('OK')
    

請求頭

可以通過request.META屬性獲取請求頭headers中的數(shù)據(jù),request.META為字典類型马澈。
其中包含HTTP_USER_AGENT瓢省、SERVER_NAME等許多信息。

  • 獲取示例:
    def get_headers(request):
        print(request.META['CONTENT_TYPE'])
        return HttpResponse('OK')
    

其他HttpResponse對象屬性

  • method: 獲取請求使用的HTTP方法痊班,常用的包括"GET"净捅、"POST"
  • user: 請求的用戶對象
  • path: 請求頁面的完整路徑,不包含域名和參數(shù)部分
  • encoding:一個字符串辩块,表示提交的數(shù)據(jù)的編碼方式
    • 如果為None則表示使用瀏覽器的默認(rèn)設(shè)置蛔六,一般為utf-8。
    • 這個屬性是可寫的废亭,可以通過修改它來修改訪問表單數(shù)據(jù)使用的編碼国章,接下來對屬性的任何訪問將使用新的encoding值。
  • FILES:一個類似于字典的對象豆村,包含所有的上傳文件液兽。

Response響應(yīng)

HttpResponse

可以使用django.http.HttpResponse來構(gòu)造響應(yīng)對象。

  • 設(shè)置方式:

    1. 傳參方式:
    HttpResponse(content=響應(yīng)體, content_type=響應(yīng)體數(shù)據(jù)類型, status=狀態(tài)碼)
    
    1. 屬性設(shè)置方式:
    response = HttpResponse()
    response.content = 響應(yīng)體
    response.status_code = 404
    
  1. 響應(yīng)頭設(shè)置:
    # 可增加新的或修改已有請求頭
    response = HttpResponse()
    response['Itcast'] = 'Python'  # 自定義響應(yīng)頭    Itcast, 值為Python
    
  • 總示例:
    from django.http import HttpResponse
    
    def demo_view(request):
        return HttpResponse('itcast python',   status=400)
        或者
        response = HttpResponse('itcast python')
        response.status_code = 400
        response['Itcast'] = 'Python'
        return response
    

HttpResponse子類

Django提供了一系列HttpResponse的子類掌动,可以快速設(shè)置狀態(tài)碼

  • HttpResponseRedirect 301
  • HttpResponsePermanentRedirect 302
  • HttpResponseNotModified 304
  • HttpResponseBadRequest 400
  • HttpResponseNotFound 404
  • HttpResponseForbidden 403
  • HttpResponseNotAllowed 405
  • HttpResponseGone 410
  • HttpResponseServerError 500

cookie設(shè)置和讀取

  • Cookie以鍵值對Key-Value形勢進(jìn)行信息的存儲四啰。
  • Cookie基于域名安全,不同域名的Cookie是不能互相訪問的
    1. 設(shè)置cookie
    可以通過HttpResponse對象中的set_cookie方法來設(shè)置cookie粗恢。

HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)

  • max_age 單位為秒柑晒,默認(rèn)為None。如果是臨時cookie眷射,可將max_age設(shè)置為None匙赞。

2. 讀取cookie
可以通過HttpRequest對象的COOKIES屬性來讀取本次請求攜帶的cookie值佛掖。request.COOKIES為字典類型。

cookies = request.COOKIES

session設(shè)置和儲存

session可保存在數(shù)據(jù)庫涌庭、本地緩存中芥被。

  • 為提高性能,常將session存在Redis中坐榆,此處以Redis為例
    1) 安裝擴(kuò)展

    pip install django-redis

    2)配置
    settings.py文件中如下設(shè)置:

    CACHES = {
    "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379/1",
    "OPTIONS": {
    "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
    }
    }
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "default"

注意:

  • 如果redis的ip地址不是本地回環(huán)127.0.0.1拴魄,而是其他地址,訪問Django時席镀,可能出現(xiàn)Redis連接錯誤匹中,需要在redis配置文件中添加特定ip地址。

  • redis://127.0.0.1:6379/1確定使用的數(shù)據(jù)庫為第二個愉昆,查看時在redis使用select 1選擇职员。

    3)session操作
    通過HttpRequest對象request的session屬性進(jìn)行會話的讀寫操作麻蹋。

    • 以鍵值對格式寫session:

    request.session[key] = value

    • 根據(jù)鍵讀取值:

    request.session.get(key,默認(rèn)值)

    • 設(shè)置session的有效期

    request.session.set_expiry(value)

    注:

  • 如果value是一個整數(shù)跛溉,session將在value秒沒有活動后過期。

  • 如果value為0扮授,那么用戶session的Cookie將在用戶的瀏覽器關(guān)閉時過期芳室。

  • 如果value為None,那么session有效期將采用系統(tǒng)默認(rèn)值刹勃,默認(rèn)為兩周堪侯,可以通過在settings.py中設(shè)置SESSION_COOKIE_AGE來設(shè)置全局默認(rèn)值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荔仁,一起剝皮案震驚了整個濱河市伍宦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乏梁,老刑警劉巖次洼,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遇骑,居然都是意外死亡卖毁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門落萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亥啦,“玉大人,你說我怎么就攤上這事练链∠柰眩” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵媒鼓,是天一觀的道長碍侦。 經(jīng)常有香客問我粱坤,道長,這世上最難降的妖魔是什么瓷产? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任站玄,我火速辦了婚禮,結(jié)果婚禮上濒旦,老公的妹妹穿的比我還像新娘株旷。我一直安慰自己,他們只是感情好尔邓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布晾剖。 她就那樣靜靜地躺著,像睡著了一般梯嗽。 火紅的嫁衣襯著肌膚如雪齿尽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天灯节,我揣著相機(jī)與錄音循头,去河邊找鬼。 笑死炎疆,一個胖子當(dāng)著我的面吹牛卡骂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播形入,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼全跨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亿遂?” 一聲冷哼從身側(cè)響起浓若,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛇数,沒想到半個月后挪钓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苞慢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年诵原,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挽放。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡绍赛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辑畦,到底是詐尸還是另有隱情吗蚌,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布纯出,位于F島的核電站蚯妇,受9級特大地震影響敷燎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箩言,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一硬贯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陨收,春花似錦饭豹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饵骨,卻和暖如春翘悉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背居触。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工妖混, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饼煞。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓源葫,卻偏偏與公主長得像诗越,于是被迫代替她去往敵國和親砖瞧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 模塊間聯(lián)系越多嚷狞,其耦合性越強(qiáng)块促,同時表明其獨(dú)立性越差( 降低耦合性,可以提高其獨(dú)立性)床未。軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,064評論 0 8
  • 一竭翠、Django框架前言知識: 1、C/S和B/S的區(qū)別: C/S結(jié)構(gòu)軟件:客戶端/服務(wù)端軟件薇搁,即客戶端要自己下載...
    月下獨(dú)酌123閱讀 4,517評論 0 36
  • 前端相關(guān) 展示內(nèi)容:瀏覽器接收后端返回的html文本(經(jīng)過模板渲染)內(nèi)容并在頁面展示.與用戶交互信息:js將用戶產(chǎn)...
    Knight方閱讀 2,842評論 0 1
  • 會話(Session)跟蹤是Web程序中常用的技術(shù)斋扰,用來跟蹤用戶的整個會話。常用的會話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,605評論 1 49
  • 1.創(chuàng)建應(yīng)用 2.創(chuàng)建class 3.按教程來 4.demo 評論demo:http://js.jirengu.c...
    索伯列夫閱讀 1,354評論 1 0