先來一個簡單的實例
urls.py
from django.conf.urls import url from django.contrib import admin from cmdb import views urlpatterns = [ url(r'^login/', views.index), ]
views.py
from django.shortcuts import render from django.views.generic import View # Create your views here. class login(View)
def get(self,request):
return render(request,'login.html') def post(self,request): user_input = [] user = request.POST.get('user',None) email = request.POST.get('email',None) temp = {'user':user,'email':email} USER_INPUT.append(temp) return render(request,'login.html',{'data':USER_INPUT})
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {# 把表單以post方式提交index函數處理#} <form action="login/" method="post"> <input type="text" name="user"/> <input type="text" name="email"> <input type="submit" value="提交"> </form> {#將提交到login函數的表單內容在這里展示#} <h1>數據展示</h1> <table border="1"> {% for item in data %} <tr> <td>{{ item.user }}</td> <td>{{ item.email }}</td> </tr> {% endfor %} </table> </body> </html>
登錄流程:
輸入127.0.0.1/login
把瀏覽器信息,客戶端地址,訪問地址等封裝到request里,以GET方式發送給login的url(因為是訪問頁面,所以是GET請求)
匹配到對應的url
在根據url匹配到處理函數,直接顯示頁面,完成訪問登錄頁面
在登錄頁面輸入用戶名密碼,點擊登錄
form表單把輸入的信息,瀏覽器信息,客戶端地址,訪問地址等封裝到request對象里,以post的形式發送給login的url
匹配到對應的url
根據url匹配到處理函數,發現是post請求,讓post處理
POST處理完,把登錄用戶等信息封裝到request里,和上下文一起傳給login.html,用來渲染login.html
request對象的屬性
request.scheme
代表請求的方案,http或者https
request.path
請求的路徑,比如請求127.0.0.1/org/list,那這個值就是/org/list
request.method
表示請求使用的http方法,GET或者POST請求
request.encoding
表示提交數據的編碼方式
request.GET
獲取GET請求
request.POST
獲取post的請求,比如前端提交的用戶密碼,可以通過request.POST.get()來獲取
另外:如果使用 POST 上傳文件的話,文件信息將包含在 FILES 屬性中
request.COOKIES
包含所有的cookie
request.META
一個標准的Python 字典,包含所有的HTTP 首部。具體的頭部信息取決於客戶端和服務器,下面是一些示例:
- CONTENT_LENGTH —— 請求的正文的長度(是一個字符串)。
- CONTENT_TYPE —— 請求的正文的MIME 類型。
- HTTP_ACCEPT —— 響應可接收的Content-Type。
- HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。
- HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。
- HTTP_HOST —— 客服端發送的HTTP Host 頭部。
- HTTP_REFERER —— Referring 頁面。
- HTTP_USER_AGENT —— 客戶端的user-agent 字符串。
- QUERY_STRING —— 單個字符串形式的查詢字符串(未解析過的形式)。
- REMOTE_ADDR —— 客戶端的IP 地址。
- REMOTE_HOST —— 客戶端的主機名。
- REMOTE_USER —— 服務器認證后的用戶。
- REQUEST_METHOD —— 一個字符串,例如"GET" 或"POST"。
- SERVER_NAME —— 服務器的主機名。
- SERVER_PORT —— 服務器的端口(是一個字符串)
request.user
一個 AUTH_USER_MODEL 類型的對象,表示當前登錄的用戶。
如果用戶當前沒有登錄,user 將設置為 django.contrib.auth.models.AnonymousUser 的一個實例。你可以通過 is_authenticated() 區分它們
把request傳給前端的時候,前端可以通過 {% if request.user.is_authenticated %}判斷用戶時候登錄
request.session
一個既可讀又可寫的類似於字典的對象,表示當前的會話
