上一篇文章鏈接Django02
我們接着上一篇文章的基礎上,來繼續瞭解進一步的Django框架
用pycharm打開之前創建的項目watercar
1.form表單的GET和POST:
1.1在index.html 裏添上:
<form action="/login" method="GET">
<input type="text" name="user_name">
<input type="text" name="user_name">
<input type="password" name="password">
<input type="submit">
</form>
#點擊提交按鈕submit時
#使用get方法url中可以顯示相應信息如:file:///F:/Program%20Files/eclipse/workspace/test/src/html/Html.html?name=123&pwd=123
#post方法<form action="Html.html" method=“post”> url中只有網址
#默認方法爲get
1.2設置urls:
url(r'^login$', views.login),
1.3設置views裏的控制函數:
def login(request):
methon_style = request.method #獲取method的類型(GET/POST)
if methon_style == 'GET':
parm = request.GET #獲取GET請求傳輸的所有鍵值對數據
print(parm)
name_qiemingzi = parm['user_name'] #獲取的是對應鍵的值的最後一個數據
name_get = parm.get('user_name', 'not_found') #獲取的是對應鍵的值的最後一個數據
name_getlist = parm.getlist('user_name') #獲取的是對應鍵的值的列表
print(name_get)
print(name_qiemingzi)
print(name_getlist)
elif methon_style=='POST':
parm = request.POST
print(parm)
name_qiemingzi = parm['user_name']
name_get = parm.get('user_name','not_found')
name_getlist = parm.getlist('user_name')
return HttpResponse('ok')
2. cookie 和session:
2.1概念:
session和cookie都是緩存,其存在的目的都是爲了減少用戶request和reponse之間的時間耗損,提高用戶的瀏覽體驗。
cookies是指某些網站爲了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。
cookie大致上分爲兩種,分別是會話cookie和持久化cookie。
session是存儲在服務端的,獲取方式:通過cookie裏的session id(通過服務器生成)獲取,
而session是存放在服務器的內存中的,所以session的數據不斷增加會造成服務器的負擔,
所以只會把很重要的信息存儲在session中,而把一些次要的東西存儲在客戶端的cookie中。
會話cookie是存放在客戶端瀏覽器的內存中,他的生命週期和瀏覽器是一致的,當瀏覽器關閉會話cookie也就消失了,
而持久化cookie是存放在客戶端硬盤中,持久化cookie的生命週期是我們在設置cookie時候設置的那個保存時間。
2.2 創建cookie: #在cookie裏添加數據,同時傳一份數據在服務器的session裏
def set_cookie(request):
response = HttpResponse('ok')
response.set_cookie('name','laowang') #設定cookie的鍵值對
return response
#urls自己設定
#在網頁的檢查裏,network 的 all 裏,刷新網頁,從set_cookie 裏可以看出
2.3 得到COOKIES:
def get_cookie(request):
print(request.COOKIES['name']) #request.COOKIES[]獲取cookie裏的暫時保存的值
return HttpResponse('ok')
#urls自己設定
#在終端裏看出
2.4 得到session: #request.session.get()獲取session裏面保存的值
def get_session(request):
request.session.set_expiry(None) #set_expiry設置會話的自定義到期時間----------如果value設置爲None則意思是session永不清除。
request.session.flush() #用flush可以把session清除掉。
print(request.session.get('name','null')) #獲取session裏的name的值,如果獲取不到,就輸出null
return HttpResponse('ok!')
#urls自己設定
#在終端的waterDB數據庫裏,select * from django_session \G; 然後看到的基本上是加密的亂碼
-
自關聯查詢:
3.1 在model裏定義一個自關聯用的class,並生產遷移文件遷移到數據庫裏: class AreaInfo(models.Model): name = models.CharField(max_length=20) parent = models.ForeignKey('self',null=True,blank=True) def __str__(self): return self.name 3.2 在templates裏設置: 當前所在的省:{{ obj.parent.name }} 當前的市:{{ obj.name }} 當前的區: {% for i in obj.areainfo_set.all %} {{ i.name }} {% endfor %} 3.3 設置urls查詢關鍵字: url(r'^dizhi$',views.dizhi), 3.4 設置views裏的控制函數: def dizhi(request): obj = AreaInfo.objects.get(id=2) context = {'obj':obj} return render(request,'zi_link.html',context=context) 3.5 驗證自關聯: 在網頁admin管理裏面,新建AreaInfo對象,先新建一個沒有parents的對象,接下來新建一個新的對象時,他的parents可以選擇之前創建過的對象。這就叫具有自關聯(自己關聯自己)