Django--4--views.py詳解
阿新 • • 發佈:2019-01-27
1.views.py的作用:業務資料的請求和處理
2.request & response
先來看看之前這張圖,urls.py在上一節我們已經說過了。而MTV模式中的V模組還有另外兩個重要的東西,即 request 和response
而這兩個物件其實是http請求中重要的兩個物件,而在python中http請求的物件是HttpRequest,http響應的物件是HttpResponse,所在位置是Django.http)
from django.shortcuts import render
from django.contrib.auth.models import User from接下來談談HttpRequest物件的常用屬性:django.http import HttpRequest, HttpResponse # 這裡我們進行匯入 # Create your views here. def hello(request): # 注意這個引數request, 它的型別就是HttpRequest user_list = User.objects.all()return render(request, 'table.html', {'user_list': user_list})
from django.shortcuts import而因為這裡是get屬性,所以我們可以這樣寫:render from django.contrib.auth.models import User # Create your views here. def hello(request): print request.path # 請求頁面的全路徑 這裡是/hello/ print request.method # 請求使用的http方法 這裡是GETuser_list = User.objects.all()return render(request, 'table.html', {'user_list': user_list})
fromdjango.shortcuts import render from django.contrib.auth.models import User # Create your views here. def hello(request):print request.GET.get('name')
# 因為是GET方法,我們可以這樣寫url:"http://localhost:8000/hello/?name="chris",這句程式碼就會輸出
user_list = User.objects.all()return render(request, 'table.html', {'user_list': user_list})
接下來嘗試一下post的效果:
首先我們需要構造個表單,在html原始碼中加上這段
<form method="post" action="/hello/">
{% csrf_token %}
<input type = "text" value=" " name="key">
<input type = "submit" value = "提交"></form>
然後我們在程式碼裡面這樣寫
# Create your views here. def hello(request): print request.POST.get('key') # 這裡就會輸出你輸入的key的值了 user_list = User.objects.all() # render實現渲染功能 return render(request, 'table.html', {'user_list': user_list})除了path, method, get, post之外,還有幾個重要的屬性:user,這個屬性儲存了Django登入使用者的相關資訊 ;session:儲存會話屬性
接下來是HttpResponse的相關屬性:
首先要說明一點是,對於HttpRequest物件來說,是Django自己建立的,但是HttpResponse就必須要我們自己建立。注意每個view方法都必須返回一個HttpResponse物件,HttpResonse物件也是在Django.http裡面,這裡我們看看之前一直用到的render函式:
def render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None, current_app=_current_app_undefined, dirs=_dirs_undefined, dictionary=_dictionary_undefined, using=None): ...........省略............ return HttpResponse(content, content_type, status) # 可以看到最後返回的就是個HttpResponse物件這裡的render函式其實是給我們一種快捷的方法,這裡我們也可以自己去定義HttpResponse:
def hello(request): response = HttpResponse("Hello I am a HttpResponse") return response這樣你開啟頁面,就會看到“Hello I am a HttpResponse”這句話,不過不推薦這樣寫哦,render()就挺方便的。這裡還有個redirect()方法,在這裡是做頁面跳轉的:
# Create your views here. def hello(request):return redirect('http://www.baidu.com') # 這樣當你開啟的時候,就會出來百度的頁面了最後還要說的一個方法是locals(),這個方法會將函式中所有的方法全部傳遞給模板
這個方法用於當你要傳遞的變數(就像是之前的user_list)很多的時候,這個時候如果一個一個寫就很麻煩。所以這裡可以這樣寫:
# Create your views here. def hello(request): user_list = User.objects.all()return render(request, 'table.html', locals()) # locals()
to be continued...