流程
用户登录login页面,成功则设置session并将信息存到数据库中,返回index页面,index中可跳转home和退出登录但都需要校验。
数据库配置初始化
session存储使用到了数据库,可以使用自带的sqllte 也可以使用mysql(mysql配置请参考orm相关文章)。
python manage.py makemigrations
python manage.py migrate
# 生成的数据库中会有一个 django_session表
视图逻辑配置
from django.shortcuts import render,HttpResponse,redirect
from django.views import View
# Create your views here.
def login_session_auth(func):
def inner(request,*args,**kwargs):
is_login = request.session.get('session_login')
if is_login == True:
return func(request,*args,**kwargs)
else:
return redirect('login')
return inner
class Loginview(View):
def get(self,request):
return render(request,'login.html')
def post(self,request):
user = request.POST.get('user')
pwd = request.POST.get('pass')
if user == 'guo' and pwd == 'guo':
request.session['session_login'] = True
return render(request,'index.html')
else:
return render(request,'login.html')
@login_session_auth
def home(request):
'''
返回home页面
'''
return render(request, 'home.html')
# session_login = request.session.get('session_login')
# print(session_login,type(session_login))
# if session_login == True:
# return render(request, 'home.html')
# else:
# return redirect('login')
@login_session_auth
def logout(request):
request.session.delete() # 删除session后 数据库中的记录也会被删除
return redirect('login')
url配置
from django.contrib import admin
from django.urls import path
from test01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/',views.Loginview.as_view(),name='login'),
path('home/', views.home, name='home'),
path('logout/',views.logout,name='logout'),
]
html配置
logout配置 (其他两个页面不变)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h1> 这是首页!</h1>
<a href="/home/">home目录</a>
<h1><a href="/logout/">退出登录</a> </h1>
</body>
</html>