視圖函數
一個視圖函數,簡稱視圖,是一個簡單的Python 函數,它接受Web請求而且返回Web響應。響應能夠是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或者一張圖片. . . 是任何東西均可以。不管視圖自己包含什麼邏輯,都要返回響應。代碼寫在哪裏也無所謂,只要它在你的Python目錄下面。除此以外沒有更多的要求了——能夠說「沒有什麼神奇的地方」。爲了將代碼放在某處,約定是將視圖放置在項目或應用程序目錄中的名爲views.py的文件中。html
1、視圖函數
必定包含兩個對象:
requset---->用戶請求相關的全部信息(對象)
Httpresponse---->響應字符串python
注:它接受的參數,第一個參數默認就是request對象,它的返回值必定要是一個HttpResponse類型django
- FBV --->把視圖寫成一個函數
path('login/',views.Login.as_view(),name="login"),#CBV方式 (Login(類),as_view(類方法)) def func(request): #在函數中如何區分GET請求和POST請求 if request.method == "POST": -->這是POST請求 -->提交數據 if request.method == "GET": -->這是GET請求 -->獲取一個頁面
下面是一個返回當前日期和時間做爲HTML文檔的視圖:
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)讓咱們逐行閱讀上面的代碼:cookie
-
首先,咱們從 django.http模塊導入了HttpResponse類,以及Python的datetime庫。session
-
接着,咱們定義了current_datetime函數。它就是視圖函數。每一個視圖函數都使用HttpRequest對象做爲第一個參數,而且一般稱之爲request。函數
注意,視圖函數的名稱並不重要;不須要用一個統一的命名方式來命名,以便讓Django識別它。咱們將其命名爲current_datetime,是由於這個名稱可以精確地反映出它的功能。post
-
這個視圖會返回一個HttpResponse對象,其中包含生成的響應。每一個視圖函數都負責返回一個HttpResponse對象。url
視圖函數,圍繞着兩個對象進行:HttpResponse和HttpRequest -
- CBV --->把視圖寫成一個類
導入基類 from django.views import View class Login(View): def dispatch(self): 在請求前和請求以後執行 hasattr("get") 具體咱們會在後面講cookie和session時候再講(登陸) def get(self, request,): -->這是GET請求 def post(self,request): -->這是POST請求
2、HttpRequest
request---->請求信息 屬性:spa
request.path # 獲取訪問文件路徑 request.method屬性 #獲取請求中使用的HTTP方式(POST/GET) request.body #含全部請求體信息 是bytes類型 request.GET #GET請求的數據(類字典對象) 請求頭中的url中?後面拿值 request.POST # POST請求的數據(類字典對象) 請求體裏拿值 request.COOKIES #包含全部cookies的標準Python字典對象;keys和values都是字符串。 request.FILES: 包含全部上傳文件的類字典對象;FILES中的每個Key都是<input type="file" name="" />標籤中 name屬性的值,FILES中的每個value同時也是一個標準的python字典對象,包含下面三個Keys: filename: 上傳文件名,用字符串表示 content_type: 上傳文件的Content Type content: 上傳文件的原始內容 request.user: 是一個django.contrib.auth.models.User對象,表明當前登錄的用戶。若是訪問用戶當前 沒有登錄,user將被初始化爲django.contrib.auth.models.AnonymousUser的實例。你 能夠經過user的is_authenticated()方法來辨別用戶是否登錄: if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 時該屬性纔可用 request.session: 惟一可讀寫的屬性,表明當前會話的字典對象;本身有激活Django中的session支持時該屬性纔可用 request.GET.get('name') 拿到GET請求裏name的值 若是某個鍵對應有多個值,則不能直接用get取值,須要用getlist,如: request.POST.getlist("hobby") 請求url:http://127.0.0.1:8000/index.html/23?a=1 request.path : 請求路徑 request.path結果爲:/index.html/23 request.get_full_path() request.get_full_path()結果爲:/index.html/23?a=1
方法:.net
get_full_path()
注意:鍵值對的值是多個的時候,好比checkbox類型的input標籤,select標籤,須要用:
request.POST.getlist("hobby")
3、HttpResponse
https://www.cnblogs.com/huchong/p/7718393.html
Form表單提交數據、三要素:
1.action="提交的URL地址",method="post"
2. form表單裏必須包含一個submit按鈕
3.input、select、checkbox、radio、textarea、file必須有name的屬性