python_django_views視圖模塊

視圖(views.py):接收web請求,並響應web請求html

在視圖響應web請求的過程當中,響應文件多是網頁,也多是json數據程序員

若響應的是網頁,咱們可分爲:web

視圖函數:在views.py下自定義的各種函數ajax

視圖參數:視圖函數的形式參數,通常咱們寫的是request,這個參數勒通常就存的是咱們瀏覽器發給咱們的內容(一串數據流也能夠稱做是一個HttpRequest實例)django

錯誤視圖:json

404視圖:找不到網頁(url匹配不成功)時返回瀏覽器

  咱們也能夠自定義404頁面:服務器

    1.在templates下定義404.html(<h2>{{request_path}}</h2>   # 致使錯誤的網址)cookie

     2.配置setting.pysession

         a.  DEBUG=True表明永遠不會調用404.html頁面,因此咱們這裏要設置爲False

       b.  ALLOWED_HOSTS=['*']   # 容許任何人訪問

大概樣子長這樣↓↓↓:

500視圖:在視圖代碼中出現錯誤(服務器代碼錯誤)
400視圖:錯誤出如今客戶端的操做(服務器發現你是爬蟲或cookie中帶了錯誤等)

視圖中可操做對象:

HttpRequest對象瀏覽器發送給服務器的數據流

服務器接收http請求後,會根據報文(數據流)建立HttpRequest對象,調用視圖時,建立HttpRequest對象就傳入views.py中函數的request形參中。

                              —— HttpRequest對象的屬性   

          |                                                     

 HttpRequest對象—   —— HttpRequest對象的方法

          |

            —— QueryDict對象                       

 

HttpRequest對象的屬性:

path 請求的完整路徑(不包括域名和端口)
method 表示請求的方式(get/post)

encoding

表示瀏覽器提交數據的編碼方式,通常爲utf-8
GET

相似於字典的對象,包含類get請求的全部參數(獲取瀏覽器地址欄傳遞過來的數據)

POST 相似於字典的對象,包含了post請求的全部參數(例:表單提交(獲取瀏覽器提交的數據,並在views函數中做出對應的操做))
FILES 相似於字典的對象,包含了全部上傳的文件(例:word文檔上傳到服務器)
COOKIES 字典,包含類全部的cookie對象
session 相似於字典的對象,表示當前會話

舉個栗子:

          

          結果:

          

GET屬性:

舉個栗子:

  瀏覽器:

   網址:http://localhost:8000/sunck/get1?a=1&b=2&c=3   # GET獲取當數值

           

   結果(瀏覽器顯示):123

 

   網址:http://127.0.0.1:8000/sunck/get2?a=1&a=2&b=3   # GET獲取多個數值a=1&a=2

            

    結果(瀏覽器顯示):123

POST屬性:

舉個栗子:

瀏覽器:

         

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>註冊</title>
</head>
<body>
    <form action="regist/" method="post">
        姓名:<input type="text" name="name" value=""/>
        <hr/>
        性別:<input type="radio" name="gender" value="1"/><input type="radio" name="gender" value="0"/><hr/>
        年齡:<input type="text" name="age" value=""/>
        愛好:
        <input type="checkbox" name="hobby" value="power"/>權利
        <input type="checkbox" name="hobby" value="money"/>金錢
        <hr/>
        <input type="submit" value="註冊"/>
    </form>
</body>
</html>
瀏覽器html代碼

服務器:

         

from django.shortcuts import render,redirect,HttpResponse
def showregist(request):
    return render(request,'myapp/regist.html')
def regist(request):
    name = request.POST.get("name")
    gender = request.POST.get("gender")
    age = request.POST.get("age")
# 這個網頁提交過來獲得的值,用模型類建立表單對象,對應的就能夠存入數據表中勒
    hobby = request.POST.getlist("hobby")
    print(name)
    print(gender)
    print(age)
    print(hobby)
    return HttpResponse("post")
Views模塊函數

對應url配置(這裏能夠直接用地址重定向,就不用寫這麼複雜勒):

HttpRequest的方法:

is_ajax():若經過XMLHttpRequest發起的,返回True(ajax請求,通常返回json數據)

QueryDict對象:request對象中的GET/POST都屬於QueryDict對象

  方法:

    get():根據鍵獲取值(且只能獲取一個值)www.sunck.wang/abc?a=1&b=2&c=3
    getlist():將鍵的值以列表的形式返回(獲取多個值)


HttpRequest對象是由django建立,HttpResponse對象是由程序員建立(由於要合成返回給瀏覽器的數據)

HttpRequest對象: 給瀏覽器返回數據

返回數據的方法:

1. 不調用模板,直接返回數據(例:return HttpResponse('dasfds'))

2.調用模板:使用render(request, templateName[,context])

  做用: 結合數據和模板,返回完整的html頁面

  參數:request:請求體對象

        templateName:模板路徑

      context:傳遞給須要渲染在模板上的數據

  舉個栗子:

    return render(request,'myapp/main.html',{'username':username})

                              —— HttpResponse對象的屬性   

          |                                                     

 HttpResponse對象—   —— HttpResponse對象的方法

          |    —— 子類HttpResponseRedict

          |  ——

               —— 子類JsonResponse

 

HttpResponse對象的屬性:

HttpResponse().content

返回給瀏覽器內容的類型

HttpResponse().charset

編碼方式

HttpResponse().status_code  

響應狀態碼 (200/304/404)

HttpResponse().content-type

指定輸出的MIME類型(例:若我是html文件,則按網頁渲染,若我是json文件,則爲json文件接收)

 

HttpResponse對象的方法:

init

使用頁面內容實例化HttpResponse對象

write(content)

以文件的形式寫入

flush()

以文件的形式輸出緩衝區(刷新緩衝區)

set_cookie(key,value='', max_age=None,exprise=None) 

 在瀏覽器存入cookie

delete_cookie(key)

刪除cookie(若刪除不存在的key,不會報錯)

set_cookie方法:

# cookie
def cookietest(request):
    res = HttpResponse()
    # cookie1 = request.COOKIES    # 存入後,取出cookie值
    # res.write('<h1>' + cookie['sunck'] + '</h1>')   # 在瀏覽器上顯示取出的cookie值
    cookie = res.set_cookie('sunck','good')   # 存入cookie值,這裏面俺們就能夠存一個token
    return res
    # 在瀏覽器》檢查》Network》刷新頁面》選中name》Cookie》查看寫的cookie值

子類HttpResponseRedirect:繼承類HttpResponse類

做用:地址重定向(服務器端的跳轉)

  (例:咱們輸入網址1,但顯示的頁面是網址2滴頁面)

簡寫方法:redirect()

舉個栗子:

from django.http import HttpResponseRedirect
from django.shortcuts import redirect

# 重定向
def redirect1(request):
    # return HttpResponseRedirect('/sunck/redirect2')
    return redirect('/sunck/redirect2')     # 簡寫方法(推薦使用)

def redirect2(request):
    return HttpResponse('我是重定向頁面')

對應的url:

 過程:

  當咱們在瀏覽器輸入:http://localhost:8000/sunck/redirect1時,瀏覽器顯示的網址:http://localhost:8000/sunck/redirect2/,這就是重定向,雖然在瀏覽器沒有操做,可是它是在服務器中完成了自我跳轉。

子類JsonResponse:返回json數據,通常用於異步請求(ajax)

(例:若HttpRequest().is_ajax() 爲true,則咱們通常返回的就是json數據)

大概過程:

from django.http import JsonResponse
def js(request):
    if request.is_ajax():
        return JsonResponse({})    # 返回json數據,{}表明json數據

注:JsonResponse中屬性Content-type的類型爲application/json(默認返回爲json類型)

相關文章
相關標籤/搜索