Django視圖層

1、視圖函數html

2、request對象前端

3、HttpResponse對象 python

4、JsonResponseweb

5、CBV和FBVdjango

6、文件上傳json

7、.前端提交數據編碼格式後端

 

1.視圖函數app

一個視圖函數,簡稱視圖,是一個簡單的視圖函數,它接受web請求而且返回web響應。響應能夠是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或一張圖片,是任何東西均可以。不管視圖自己包含什麼邏輯,都要返回響應。代碼寫在哪裏也無所謂,只要它在python目錄下面。除此以外沒有更多的要求了--能夠說沒有什麼神奇的地方了,爲了將代碼放在某處,約定下面是一個返回當前時間做爲HTNL文檔的視圖:函數

from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

讓咱們閱讀上面的代碼:post

* 首先,咱們從django.shortcutsmokuai導入了HttpResponse類,以及Python的datetime庫

*接着,咱們定義了current——datetime函數。他就是視圖函數。每一個視圖函數都是用了HttpRequest對象做爲一個參數,而且稱之爲request。

注意視圖函數的名稱並不重要:不須要一個統一的的命名方式命名,以便讓Django識別它,咱們將其命名爲current_datetime,是由於這個名稱可以精確的反映出它的功能。

*這個視圖會返回一個HttpResponse對象,其中包含生成的響應。每一個視圖函數都負責返回一個HttpResponse對象。

 

2.request對象

  method:請求方式

  GET:get請求的參數(post請求,也能夠攜帶參數)

  POST:post請求的參數(本質上是從body中取出來,放到裏面了)

  META:字典(放好多東西,前端傳過來的,必定從其中拿出來)

  body:post提交的數據

  path:請求的路徑,不帶參數

  request.get_full_path(): 請求路徑,戴參數

  encoding:編碼方式

3.HttpResponse對象

響應對象的主要有三種形式:

  * HttpResponse()

  *render()

  *readirect()

HttpResponse()括號內直接跟一個具體的字符串做爲響應體,比較直接很簡單,因此這裏主要介紹後面兩種:

  render()

  render(request,template_name[,context])

  結合一個給定的模板和一個給定的上下文字典,並返回一個渲染後的HttpRespone對象

  參數:request:用於生成響應的請求對象

     template_name:要使用的模板的完整名稱,可選的參數

       context:添加到模板上下文的一個字典。默認一個空字典,若是字典中的某個值是可調用的,視圖將返回一個模板頁面中模板語法進行渲染,最終渲染成一個                                           html頁面做爲響應體。  

  redirect()

  傳遞要重定向的一個硬編碼的URL  

def my_view(request):
    ...
    return redirect('/some/url/')

  也能夠是一個完整的URL

def my_view(request):
    ...
    return redirect('http://www.baidu.com/')

 

4.JsonResponse

向前端會返回一個json格式字符串的兩種方式

  # 第一種方式
    # import json
    # data={'name':'lqz','age':18}
    # data1=['lqz','egon']
    # return HttpResponse(json.dumps(data1))
    # 第二種方式
    from django.http import JsonResponse
    # data = {'name': 'lqz', 'age': 18}
    data1 = ['lqz', 'egon']
    # return JsonResponse(data)
    return JsonResponse(data1,safe=False)

  

5.CBV 和 FBV

CBV基於類的視圖(class base view)和FBV基於函數的視圖(Function base view)

cbv:一個路由寫一個類

先定義一個類:繼承至View

from django.views import View
class MyClass(View):
    # 當前端發get請求,會響應到這個函數
    def get(self, request):
        return render(request,'index.html')
    # 當前端發post請求,會響應到這個函數
    def post(self,request):
        print(request.POST.get('name'))
        return HttpResponse('cbv--post')
#當前端發post請求,會響應到這個函數
  re_path('^myclass/$',views.MyClass.as_view()),

6.文件上傳

form表單默認提交的編碼方式是enctype=「appliction/x-www-form-urlencoded」

前端:若是要form表單上傳文件,必須指定編碼方式爲:multipart/form-data

後端:

  file=request.FILES.get("myfile")

  with open (file,name,'wb') as f:

    for line in file:

      f.write(line)

7.前端提交數據編碼格式:

  multipart/from-data(上傳文件)

  application/x-www-form-urlencoded(默認編碼)

相關文章
相關標籤/搜索