<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] 利用HTTP協議向服務器傳參有以下幾種方式 1. 從url中截取 2. 使用查詢字符串 3. 在請求體中發送數據 4. 在http報文頭 `header` 中發送數據 ## 1. 從url中獲取截取 在定義路由規則的時候,可以使用正則表達式截取數據,然后傳到視圖函數中,在視圖函數中使用參數接收。 例: 瀏覽器向后端發送了一個請求,url為 `/weather/beijing/20171001` - 未命名參數 路由 ```python url(r'^weather/([a-z]+)/(\d{8})$', views.weather, name="weather") ``` ```python def weather(request, city, date): content = city+date return HttpResponse(content) ``` 視圖函數要使用位置參數接收,位置要對應,響應結果 `beijing20171001` - 命名參數 ```python url(r'^demo/', include("demo.urls", namespace="demo")) ``` ```python def weather(request, date, city): content = city+date return HttpResponse(content) ``` 可以使用正則表達式給參數命名,參數接收的時候位置不需要照應,響應結果 `beijing20171001` - 從url中截取參數不區分 get post請求方式。 ## 2. QueryDict 在django的 `HttpRequest` 對象中,屬性 `GET` 和 `POST` 得到的都是 `django.http.QueryDict` 所創建的實例,這是django自定義的一個類似字典的類。 在Python的字典中,一個鍵只能有一個值,當一個鍵賦值多次的時候,只會保留最后一個值。而在 `HttpRequest` 對象中,一個鍵往往有多個值。而 `QueryDict` 就可以用來處理一個鍵帶多個值的情況。 ### (1). QueryDict.get(key, [default]) ```python QueryDict.get(key, [default]) ``` 返回 key 的值。如果key 具有多個值,只返回最后(最新)的值。當key 不存在時返回一個默認值。       ### (2). QueryDict.getlist(key, [default]) ```python QueryDict.getlist(key, [default]) ``` 返回 key 的值。如果key 具有多個值,以列表形式返回 key 的所有值。當key 不存在時返回一個空列表,設置了默認值則返回默認值。 ## 3. 查詢字符串 在url中格式如 `?a=1&b=2` 的字符串叫做查詢字符串,可以用過 `request.GET` 獲取, `request.GET` 返回值是 `QueryDict` 對象。 url ``` /query?a=1&b=2&b=3 ``` 路由 ```python url(r'^query', views.query, name="query") ``` 視圖函數 ```python def query(request): query_dict = request.GET a = query_dict.get('a') b = query_dict.getlist('b') context = "a=%s,b=%s" % (a, b) return HttpResponse(context) ``` 響應結果 ``` a=1,b=['2', '3'] ``` - 查詢字符串不區分 get post 請求方式。 ## 4. 請求體 請求體獲得參數的各種有多種,例如 表單,json,xml...不同格式的數據要區別對待 可以發送請求體數據的請求方式有POST、PUT、PATCH、DELETE。 django默認開啟了csrf防護,會對上述的請求方式做驗證,測試時可以關閉驗證。 打開項目的配置文件 `settings.py` 注釋掉 scrf中間件 ```python MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ``` ### 4.1 Form表單 前端發送的表單類型的數據,可以使用 `request.POST` 獲取, `request.POST` 返回值是 `QueryDict` 對象。 url: ``` demo/form ``` 路由 ``` url(r'^form', views.form, name="form") ``` 表單數據 ![](https://box.kancloud.cn/36245d5a365d6bf8417297c63e21b39b_462x92.png) 視圖函數 ```python def form(request): form_data = request.POST name = form_data.get("name") age = form_data.get("age") context = "name=%s,age=%s" % (name, age) return HttpResponse(context) ``` 響應結果 ``` name=xuanli,age=18 ``` ### 4.2 非表單類型 非表單類型的數據django無法自動解析,需要通過 `request.body` 獲取原始的請求體數據,然后自己根據數據類型解析。 `request.body` 返回值是 `bytes` 對象。 例如前端請求的是json數據: url ``` demo/json ``` 路由 ``` url(r'^json', views.get_json, name="json") ``` json數據 ``` {"name": "xuanli", "age": "18"} ``` 視圖函數 ```python def get_json(request): json_data = request.body json_data = json_data.decode() req_data = json.loads(json_data) name = req_data.get("name") age = req_data.get("age") context = "name=%s,age=%s" % (name, age) return HttpResponse(context) ``` 響應結果 ``` name=xuanli,age=18 ``` - python3.6不需要使用 `decode()` 解碼 ## 請求頭 ``` ``` ## 其他
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看