django路由views.py詳解_Django學(xué)習(xí)筆記(五)-python3
1.? http請(qǐng)求產(chǎn)生的對(duì)象
2.HttpRequest
a. 表單提交
1. method=get 表單提交
附:需要表單驗(yàn)證 -{% csrf_token %}
上圖:靜態(tài)頁(yè)面
上圖:views.py 方法接收傳遞值
1. method=post 表單提交
附:需要表單驗(yàn)證 -{% csrf_token %}
上圖:頁(yè)面form表單以post方式提交
上圖:處理form表單post方式提交的值
常見(jiàn)參數(shù):
HttpRequest代表一個(gè)來(lái)自u(píng)esr-agent的HTTP請(qǐng)求。
大多重要的請(qǐng)求信息都是作為HttpRequest 對(duì)象的屬性出現(xiàn)(see Table H-1). 除了session外充易,其他所有屬性都是只讀的式撼。
path
請(qǐng)求頁(yè)面的全路徑,不包括域名—例如, "/music/bands/the_beatles/"域仇。
method
請(qǐng)求中使用的HTTP方法的字符串表示。全大寫(xiě)表示蚣驼。例如:
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
GET
包含所有HTTP GET參數(shù)的類(lèi)字典對(duì)象雳窟。參見(jiàn)QueryDict 文檔陕贮。
POST
包含所有HTTP POST參數(shù)的類(lèi)字典對(duì)象典予。參見(jiàn)QueryDict 文檔甜滨。
服務(wù)器收到空的POST請(qǐng)求的情況也是有可能發(fā)生的。也就是說(shuō)瘤袖,表單form通過(guò)HTTP POST方法提交請(qǐng)求衣摩,但是表單中可以沒(méi)有數(shù)據(jù)。因此捂敌,不能使用語(yǔ)句if request.POST來(lái)判斷是否使用HTTP POST方法艾扮;應(yīng)該使用if request.method == "POST" (參見(jiàn)本表的method屬性)。
注意: POST不包括file-upload信息黍匾。參見(jiàn)FILES屬性栏渺。
COOKIES
包含所有cookies的標(biāo)準(zhǔn)Python字典對(duì)象。Keys和values都是字符串锐涯。參見(jiàn)第12章磕诊,有關(guān)于cookies更詳細(xì)的講解。
FILES
包含所有上傳文件的類(lèi)字典對(duì)象纹腌。FILES中的每個(gè)Key都是標(biāo)簽中name屬性的值. FILES中的每個(gè)value 同時(shí)也是一個(gè)標(biāo)準(zhǔn)python字典對(duì)象霎终,包含下面三個(gè)Keys:
filename: 上傳文件名,用Python字符串表示
content-type: 上傳文件的Content type
content: 上傳文件的原始內(nèi)容
注意:只有在請(qǐng)求方法是POST,并且請(qǐng)求頁(yè)面中有enctype="multipart/form-data"屬性時(shí)FILES才擁有數(shù)據(jù)升薯。否則莱褒,F(xiàn)ILES 是一個(gè)空字典。
META
包含所有可用HTTP頭部信息的字典涎劈。 例如:
CONTENT_LENGTH
CONTENT_TYPE
QUERY_STRING: 未解析的原始查詢字符串
REMOTE_ADDR: 客戶端IP地址
REMOTE_HOST: 客戶端主機(jī)名
SERVER_NAME: 服務(wù)器主機(jī)名
SERVER_PORT: 服務(wù)器端口
META 中這些頭加上前綴HTTP_最為Key, 例如:
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_HOST: 客戶發(fā)送的HTTP主機(jī)頭信息
HTTP_REFERER: referring頁(yè)
HTTP_USER_AGENT: 客戶端的user-agent字符串
HTTP_X_BENDER: X-Bender頭信息
user
是一個(gè)django.contrib.auth.models.User 對(duì)象广凸,代表當(dāng)前登錄的用戶。如果訪問(wèn)用戶當(dāng)前沒(méi)有登錄蛛枚,user將被初始化為django.contrib.auth.models.AnonymousUser的實(shí)例谅海。你可以通過(guò)user的is_authenticated()方法來(lái)辨別用戶是否登錄:
if request.user.is_authenticated():
# Do something for logged-in users.
else:
# Do something for anonymous users.
只有激活Django中的AuthenticationMiddleware時(shí)該屬性才可用
關(guān)于認(rèn)證和用戶的更詳細(xì)講解,參見(jiàn)第12章。
session
唯一可讀寫(xiě)的屬性蹦浦,代表當(dāng)前會(huì)話的字典對(duì)象扭吁。只有激活Django中的session支持時(shí)該屬性才可用。 參見(jiàn)第12章盲镶。
raw_post_data
原始HTTP POST數(shù)據(jù)侥袜,未解析過(guò)。 高級(jí)處理時(shí)會(huì)有用處溉贿。
原文出自:http://blog.csdn.net/liu_yanna/article/details/50174851
3.HttpRespons
1. 頁(yè)面訪問(wèn)傳值的方式:
a.? django默認(rèn)傳值render(request對(duì)象枫吧,views頁(yè)面,{'key':value})
需導(dǎo)入:fromdjango.shortcutsimportrender
如圖:
舉例:
deftest(request):
key = request.POST.get('key')
returnrender(request,'index.html',{'key':key})
b. django傳值template 傳值
需導(dǎo)入:fromdjango.templateimportloader
fromdjango.httpimportHttpRequest, HttpResponse
如圖:
舉例:
defblog(request, a):
users = User.objects.all()
view = loader.get_template('index.html')
c? = {'users':users}
returnHttpResponse(view.render(c,request),
content_type="text/html")
宇色。c. django傳值 render_to_response(views頁(yè)面由蘑,{'key':value})
需導(dǎo)入:fromdjango.shortcutsimportrender_to_response
如圖:
舉例:
defblog(request, a):
print(a)
users = User.objects.all()
returnrender_to_response('index.html', {'users': users})
闽寡。d. django方法跳轉(zhuǎn)redirect(views頁(yè)面,{'key':value})
需導(dǎo)入:fromdjango.shortcutsimportrender,redirect
如圖:
舉例:
defblog(request, a):
print(a)
users= User.objects.all()
returnredirect('/index/12/sadsa')
defindex(request, id, key):
print(id)
print(key)
returnrender(request,'index.html')
尼酿。e. django頁(yè)面?zhèn)髦悼旖莺瘮?shù)render_to_response('index.html',locals())
如圖:
注釋?zhuān)簂ocals()這個(gè)函數(shù)表示將方法blog模塊里面所有的變量