First, the basic
Cookies are saved locally in the browser format: iii= "8jblpb9g2l5c9xvofhv5pt8c0v967z5t"
Session is saved on the server side. Format: {"Cookie value": {"IsLogin": True, "username": "xxx"},cookie:{}}
Second, the process
- Server generates a string
- Sends a string to the client browser while placing the session information as a key
- Set any value in the value (dictionary) corresponding to the user's session
Third, error resolution errors:no such table:django_session
Reason:
The Django session is placed in the database, and the table is initialized first.
Solve:
Project directory path > Python manage.py migrate
Iv. Example 1, demand
The order page is not logged in and cannot be accessed directly to the login page.
2. Login Page app01/views.py
12345678 |
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
12345 |
from app01 import views urlpatterns = [ url(r ‘^admin/‘ , admin.site.urls), url(r ‘^login/$‘ , views.login), ] |
Templates/login.html
1234567 |
<
body
>
<
form action
=
"/login/" method
=
"post"
>
<
input type
=
"text" name
=
"username"
>
<
input type
=
"password" name
=
"pwd"
>
<
input type
=
"submit" value
=
"submit"
>
</
form
>
</
body
>
|
4. Order Pageapp01/views.py
123456 |
def order(request):
is_login
= request.session.get(
‘is_login‘
,
False
)
#False是默认值,不设置会报错
if is_login:
return HttpResponse(
‘order‘
)
else
:
return redirect(
‘/login/‘
)
|
urls.py
123456 |
from app01 import views Code class= "Python plain" >urlpatterns = [ url (R ' ^admin/' , Admin.site.urls), url (R ' ^order/$ ' Code class= "Python Plain" >url (R ' ^login/$ ' |
5. Browser
6. Database
7. Extension: The top right corner of the order page shows the logged in user
You can also define other values, such as username, which are set when the login is successful, and the page can display different data depending on the user.
views.py
123456789 |
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
1234567 |
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
123 |
< body > {{username}} </ body > |
8, write off? order.html
1234 |
< body > {{ username }} < a href = "/logout/" >注销</ a > #加入注销跳转到logout函数处理 </ body > |
urls.py
12345678 |
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
123 |
def logout(request): del request.session[ ‘is_login‘ ] return redirect( ‘/login/‘ ) |
V. Cookie time-out period settings.py
1 |
SESSION_COOKIE_AGE = 5 #单位:秒 |
The session also has
12345 |
request.session.set_expiry(value) * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 * 如果value是 0 ,用户关闭浏览器session就会失效。 * 如果value是 None ,session会依赖全局session失效策略。 |
More
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
From for notes (Wiz)
Django--cookie&session