python之Django的入門03------form表單和cookie、session

上一篇文章鏈接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;   然後看到的基本上是加密的亂碼
  1. 自關聯查詢:

    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可以選擇之前創建過的對象。這就叫具有自關聯(自己關聯自己)
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章