天天看點

Django--cookie&session

一、基礎

cookie儲存在浏覽器本地,格式:iii="8jblpb9g2l5c9xvofhv5pt8c0v967z5t"

session儲存在伺服器端。格式:{"cookie值":{"isLogin":True,"username":"xxx"},cookie:{}}

二、流程

  1. 伺服器生成一段字元串
  2. 把字元串發送給用戶端浏覽器,同時将字元串當做key放置session資訊
  3. 在使用者的session對應的value(字典)裡設定任意值

三、錯誤解決

報錯:no such table: django_session

Django--cookie&session

原因:

Django的session是放在資料庫裡,要先初始化表。

解決:

項目目錄路徑> python manage.py migrate

四、執行個體

1、需求

訂單頁面未登入不能通路,直接跳轉到登入頁面。

2、登入頁面

app01/views.py

1 2 3 4 5 6 7 8

def

login(request):

if

request.method

=

=

'POST'

:

username

=

request.POST.get(

'username'

)

pwd

=

request.POST.get(

'pwd'

)

if

username

=

=

'user1'

and

pwd

=

=

'123'

:

request.session[

'is_login'

]

=

True

return

redirect(

'/order/'

)

return

render(request,

'login.html'

)

urls.py

1 2 3 4 5

from

app01

import

views

urlpatterns

=

[

url(r

'^admin/'

, admin.site.urls),

url(r

'^login/$'

, views.login),

]

templates/login.html

1 2 3 4 5 6 7

<

body

>

<

form

action

=

"/login/"

method

=

"post"

>

<

input

type

=

"text"

name

=

"username"

>

<

input

type

=

"password"

name

=

"pwd"

>

<

input

type

=

"submit"

value

=

"submit"

>

</

form

>

</

body

>

4、訂單頁面

app01/views.py

1 2 3 4 5 6

def

order(request):

is_login

=

request.session.get(

'is_login'

,

False

)   

#False是預設值,不設定會報錯

if

is_login:

return

HttpResponse(

'order'

)

else

:

return

redirect(

'/login/'

)

urls.py

1 2 3 4 5 6

from

app01

import

views

urlpatterns

=

[

url(r

'^admin/'

, admin.site.urls),

url(r

'^order/$'

, views.order),

url(r

'^login/$'

, views.login),

]

5、浏覽器

Django--cookie&amp;session

6、資料庫

Django--cookie&amp;session

7、擴充:訂單頁面右上角顯示登入使用者

還可以定義其它值,如username,登入成功的時候就設定上,然後頁面可以根據不同的使用者顯示不同的資料。

views.py

1 2 3 4 5 6 7 8 9

def

login(request):

if

request.method

=

=

'POST'

:

username

=

request.POST.get(

'username'

)

pwd

=

request.POST.get(

'pwd'

)

if

username

=

=

'user1'

and

pwd

=

=

'123'

:

request.session[

'is_login'

]

=

True

request.session[

'username'

]

=

'user1'

return

redirect(

'/order/'

)

return

render(request,

'login.html'

)

views.py

1 2 3 4 5 6 7

def

order(request):

is_login

=

request.session.get(

'is_login'

,

False

)   

#False是預設值,不設定會報錯

if

is_login:

username

=

request.session.get(

'username'

,

False

)

return

render(request,

'order.html'

,{

'username'

:username})

else

:

return

redirect(

'/login/'

)

oreder.html

1 2 3

<

body

>

{{username}}

</

body

>

8、登出​

order.html

1 2 3 4

<

body

>

{{ username }}

<

a

href

=

"/logout/"

>登出</

a

>    #加入登出跳轉到logout函數處理

</

body

>

urls.py

1 2 3 4 5 6 7 8

from

app01

import

views

urlpatterns

=

[

url(r

'^admin/'

, admin.site.urls),

url(r

'^$'

, views.index),

url(r

'^order/$'

, views.order),

url(r

'^login/$'

, views.login),

url(r

'^logout/$'

, views.logout),   

#加一個logout

]

views.py

1 2 3

def

logout(request):

del

request.session[

'is_login'

]

return

redirect(

'/login/'

)

五、cookie逾時時間

settings.py

1

SESSION_COOKIE_AGE

=

5    #機關:秒

session也有

1 2 3 4 5

request.session.set_expiry(value)

*

如果value是個整數,session會在些秒數後失效。

*

如果value是個datatime或timedelta,session就會在這個時間後失效。

*

如果value是

,使用者關閉浏覽器session就會失效。

*

如果value是

None

,session會依賴全局session失效政策。

更多

https://docs.djangoproject.com/en/1.9/topics/http/sessions/

http://docs.30c.org/djangobook2/chapter14/

https://docs.djangoproject.com/en/1.9/ref/settings/#settings-sessions

來自為知筆記(Wiz)

轉載于:https://www.cnblogs.com/daliangtou/p/5284448.html