1. 程式人生 > >Django--4--views.py詳解

Django--4--views.py詳解

1.views.py的作用:業務資料的請求和處理

2.request & response

先來看看之前這張圖,urls.py在上一節我們已經說過了。而MTV模式中的V模組還有另外兩個重要的東西,即 requestresponse

而這兩個物件其實是http請求中重要的兩個物件,而在python中http請求的物件是HttpRequest,http響應的物件是HttpResponse,所在位置是Django.http)

from django.shortcuts import render
from django.contrib.auth.models import User
from 
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})
接下來談談HttpRequest物件的常用屬性:
from django.shortcuts import 
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})
而因為這裡是get屬性,所以我們可以這樣寫:
from 
django.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...