溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django框架的使用教程路由請求響應的方法

發布時間:2020-10-05 18:42:04 來源:腳本之家 閱讀:157 作者:Gaidy 欄目:開發技術

路由

路由可以定義在工程的目錄下(看你的需求),也可以定義在各個應用中來保存應用的路由,用主路文件urls中使用include()包含各個應用的子路由的數據

路由的解析順序

Django接收到請求后,從主路由文件urlpatterns中的路由從上倒下順序查找,如果有include包含,則進入子應用的urls中的urlpatterns中查找(從上而下)

路由的結尾斜線

Django有/結尾路由,用戶不需要加/,就可以直接重定向到/結尾的路徑上

路由命名(可以避免不同應用使用相同名字發生沖突)

如:

# 主路由
from django.conf.urls import url,include
from django.contrib import admin
import django_test.urls

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^users/',include(django_test.urls ,namespace='users'))
]

reverser反解析(子應用的路由都需要命名)

注意點:

  1. 對于未指明namespace的,reverse(路由name)
  2. 對于指明namespace的,reverse(命名空間namespace:路由name)

請求(POST,PUT,PATCH,DELETE)默認開啟CSRF防護

post請求那些需要到postman測試工具里面測試

先把CSRF防護注釋掉

Django框架的使用教程路由請求響應的方法

服務器傳遞參數的方式

URL:直接在URL中傳遞數據

查詢字符串:key1=value1&key2=value2;

請求體:在body中傳遞數據,常見有表單,json,xml

請求頭:在http報文頭中

URL參數傳遞

未定義參數順序傳遞

子應用的路由設置

urlpatterns = [
  # 這邊定義子應用的路由
  url(r'^index/$',views.index,name='index'),
  url(r'^show/$',views.show,name='show'),
  url(r'^parameter/([a-z]+)/(\d{4})$',views.parameter,name='parameter'),
]

定義視圖函數

# name,和age參數位置調換會影響下面的輸出結果
def parameter(request,name, age):

  print('age=%s'%age)
  print('name=%s' % name)
  return HttpResponse('OK')

命名參數按照名字傳遞

子路由

urlpatterns = [
  # 這邊定義子應用的路由
  url(r'^index/$',views.index,name='index'),
  url(r'^show/$',views.show,name='show'),
  url(r'^parameter/(?P<name>[a-z]+)/(?P<age>\d{4})$',views.parameter,name='parameter'),
]

視圖函數

# age 和name位置改變值不變
def parameter(request,age, name):

  print('age=%s'%age)
  print('name=%s' % name)
  return HttpResponse('OK')

查詢字符串(傳遞參數)

注意:查詢字符串不區分請求方式,即假使客戶端進行POST方式的請求,依然可以通過request.GET獲取請求中的查詢字符串數據。

子路由

url(r'^qust/$',views.qust),

視圖函數

def qust(request):
  a = request.GET.get('a')
  b = request.GET.get('b')
  alist = request.GET.getlist('a')
  print(a) # 3
  print(b) # 2
  print(alist) # ['1', '3']
  return HttpResponse('OK')

運行(后面在加)

Django框架的使用教程路由請求響應的方法

請求體(傳遞參數)

表單類

路由設置

url(r'^get_form/$', views.get_form)

視圖函數

def get_form(request):
  name = request.POST.get('name')
  age = request.POST.get('age')
  alist = request.POST.getlist('name')
  print(name)
  print(age)
  print(alist)
  return HttpResponse('OK')

運行

Django框架的使用教程路由請求響應的方法

Django框架的使用教程路由請求響應的方法

非表單類

路由

url(r'^get_body_json/$', views.get_body_json),

視圖

def get_body_json(request):
  json_str = request.body
  json_str = json_str.decode() # python3.6 無需執行此步
  req_data = json.loads(json_str)
  print(req_data['a'])
  print(req_data['b'])
  return HttpResponse('OK')

運行

Django框架的使用教程路由請求響應的方法

請求頭(傳遞參數)

可以通過request.META屬性獲取請求頭headers的數據

路由

url(r'^get_head/$', views.get_head)

視圖函數

def get_head(request):
  print(request.META['CONTENT_TYPE'])
  return HttpResponse('OK')

運行

Django框架的使用教程路由請求響應的方法

常見的請求頭

CONTENT_LENGTH – The length of the request body (as a string).

CONTENT_TYPE – The MIME type of the request body.

HTTP_ACCEPT – Acceptable content types for the response.

HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.

HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.

HTTP_HOST – The HTTP Host header sent by the client.

HTTP_REFERER – The referring page, if any.

HTTP_USER_AGENT – The client's user-agent string.

QUERY_STRING – The query string, as a single (unparsed) string.

REMOTE_ADDR – The IP address of the client.

REMOTE_HOST – The hostname of the client.

REMOTE_USER – The user authenticated by the Web server, if any.

REQUEST_METHOD – A string such as  "GET" or  "POST" .

SERVER_NAME – The hostname of the server.

SERVER_PORT – The port of the server (as a string).

響應

  1.  HttpResponse提供一系列子類
  2. HttpResponseRedirect 301
  3. HttpResponsePermanentRedirect 302
  4. HttpResponseNotModified 304
  5. HttpResponseBadRequest 400
  6. HttpResponseNotFound 404
  7. HttpResponseForbidden 403
  8. HttpResponseNotAllowed 405
  9. HttpResponseGone 410
  10. HttpResponseServerError 500

案例 # HttpResponse(content=響應體,content_type=響應數據類型,status=狀態碼)

# content:表示返回的內容
# status_code:返回的HTTP響應狀態碼
# content_type: 指定返回數據的MIME類型
from django_http import HttpResponse

def index(request):
  return HttpResponse('歡迎來到Gaidy博客', status=202)

JsonResponse(返回的json數據)

from django.http import JsonResponse

def index(request):
  return JsonResponse({'name': 'gaidy', 'age': '25'})

運行結果

Django框架的使用教程路由請求響應的方法

redirect重定向

from django.shortcuts import redirect

# django_test是路由的空間命名
def show(request):
  # 重定向
  return redirect(reverse('django_test:index'))

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女